1、屏蔽
a、Home/Recent 按键
权限配置:
<uses-permission android:name="android.permission.REORDER_TASKS" />
代码编写:
@Override
protected void onPause() {
super.onPause();
ActivityManager activityManager = (ActivityManager) getApplicationContext()
.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.moveTaskToFront(getTaskId(), 0);
}
b、Back 按键
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
return if (event.getKeyCode() === KeyEvent.KEYCODE_BACK) {
//do something.
true
} else {
super.dispatchKeyEvent(event)
}
}
2、Home/Recent拦截 (广播处理)
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
public class HomeListener {
private static final String TAG1 = "HomeListener";
public static HomeKeyListener getInstance() {
HomeKeyListener listener = HomeKeyListener.sListener;
listener.init();
return listener;
}
public static class HomeKeyListener {
private static final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";//home键旁边的最近程序列表键
private static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";//按下home键
private static final String SYSTEM_DIALOG_REASON_ASSIST = "assist";//某些三星手机的程序列表键
private static AtomicBoolean isDestroy = new AtomicBoolean(true);
private static AtomicBoolean isRegister = new AtomicBoolean(false);
private static HomeKeyListener sListener = new HomeKeyListener();
private List<HomePressListener> mPressListeners = new ArrayList<HomePressListener>();
private HomeReceiver mReceiver;
private IntentFilter mHomeFileter;
private HomePressListener mHomePressListener;
public void init() {
if (isDestroy.get()) {
this.mPressListeners = new ArrayList<HomePressListener>();
this.mReceiver = new HomeReceiver();
this.mHomeFileter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
isDestroy.set(false);
}
}
public synchronized void start(Context context) {
if (!isRegister.get()) {
context.registerReceiver(mReceiver, mHomeFileter);
isRegister.set(true);
}
}
public synchronized void stop(Context context) {
if (isRegister.get()) {
context.unregisterReceiver(mReceiver);
}
}
public void setHomeKeylistener(HomePressListener listener) {
this.mHomePressListener = listener;
}
public void addHomeKeyListener(HomePressListener listener) {
mPressListeners.add(listener);
}
public void removeHomeKeyListener(HomePressListener listener) {
mPressListeners.add(listener);
}
public void removeAllHomeKeyListener() {
mPressListeners.clear();
}
public void destroy() {
this.mPressListeners.clear();
this.mPressListeners = null;
this.mReceiver = null;
this.mHomeFileter = null;
this.mHomePressListener = null;
isDestroy.set(true);
}
public interface HomePressListener {
void onHomePress();
void onHomeRecentAppsPress();
}
class HomeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
receive(intent);
}
}
private void receive(Intent intent) {
String action = intent.getAction();
if (action != null && action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra("reason");
dispatchPress(reason);
}
}
private void dispatchPress(String reason) {
Log.e(TAG1, "reason------> " + reason);
switch (reason) {
case SYSTEM_DIALOG_REASON_HOME_KEY:
if (mHomePressListener != null) mHomePressListener.onHomePress();
for (HomePressListener listener : mPressListeners) listener.onHomePress();
break;
case SYSTEM_DIALOG_REASON_RECENT_APPS:
case SYSTEM_DIALOG_REASON_ASSIST:
if (mHomePressListener != null) mHomePressListener.onHomeRecentAppsPress();
for (HomePressListener listener : mPressListeners)
listener.onHomeRecentAppsPress();
break;
}
}
}
}