网上可能会有一种不全面的实现方法:通过监听控件的生命周期,但是一旦app是被其它的应用遮挡,而不是真正回到桌面,这个是无法判断的。
参照资料:https://blog.csdn.net/wenzhi20102321/article/details/78604136
定义广播类
public class HomeWatcherReceiver extends BroadcastReceiver {
private static final String LOG_TAG = " TAG HomeReceiver";
private static final String SYSTEM_DIALOG_REASON_KEY = "reason";
//action内的某些reason
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_LOCK = "lock";//锁屏键
private static final String SYSTEM_DIALOG_REASON_ASSIST = "assist";//某些三星手机的程序列表键
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
// App app = (App) context.getApplicationContext();
Logger.e(LOG_TAG, "onReceive: action: " + action);
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {//Action
// android.intent.action.CLOSE_SYSTEM_DIALOGS
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
Logger.e(LOG_TAG, "reason: " + reason);
if (SYSTEM_DIALOG_REASON_HOME_KEY.equals(reason)) { // 短按Home键
//可以在这里实现关闭程序操作。。。
Logger.e(LOG_TAG, "homekey");
List<HomeWatchHelper.OnHomeKeyPressedListener> homeKeyPressedListeners = HomeWatchHelper.getInstance().getHomeKeyPressedListeners();
boolean background = GlobalMagicJavaUtil.isBackground(context);
if(background == false){
for (HomeWatchHelper.OnHomeKeyPressedListener item: homeKeyPressedListeners){
item.onHomeKeyPressed();
}
}else{
Logger.e(LOG_TAG, "应用已经在后台了,homekey就不回调了。");
}
} else if (SYSTEM_DIALOG_REASON_RECENT_APPS.equals(reason)) {//Home键旁边的显示最近的程序的按钮
// 长按Home键 或者 activity切换键
Logger.e(LOG_TAG, "long press home key or activity switch");
} else if (SYSTEM_DIALOG_REASON_LOCK.equals(reason)) { // 锁屏,似乎是没有反应,监听Intent.ACTION_SCREEN_OFF这个Action才有用
Logger.e(LOG_TAG, "lock");
} else if (SYSTEM_DIALOG_REASON_ASSIST.equals(reason)) { // samsung 长按Home键
Logger.e(LOG_TAG, "assist");
}
}
}
}
注册与解注册广播
//注册广播接收者,监听Home键
private void registerHomeKeyReceiver(Context context) {
Logger.e(TAG, "registerHomeKeyReceiver");
mHomeKeyReceiver = new HomeWatcherReceiver();
IntentFilter homeFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
context.registerReceiver(mHomeKeyReceiver, homeFilter);
}
//取消监听广播接收者
private void unregisterHomeKeyReceiver(Context context) {
Logger.e(TAG, "unregisterHomeKeyReceiver");
if (null != mHomeKeyReceiver) {
context.unregisterReceiver(mHomeKeyReceiver);
}
}
0 条评论