需求:
用户按下Home键时,停留在当前Activity,不要跳转到默认桌面。网上搜了一堆,都没啥用,只得自己搞。
Home键监听
按下home键时,系统发送广播android.intent.action.CLOSE_SYSTEM_DIALOGS;
通过监听广播触发启动当前界面, 但不能直接使用intent跳转,会出现延迟闪烁,需要使用pendingintent(注意: intent 要适配好,这样再次启动这个Activity就不会重新创建,也不会出现闪屏情况);
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (LOGD) {
Log.w(TAG, "onReceive: " + action);
}
if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
final String reason = intent.getStringExtra(EXTRA_KEY_REASON);
if (LOGD) {
Log.w(TAG, "reason: " + reason);
}
if (REASON_HOME_KEY.equals(reason)) {
onHomeKeyPress();
} else if (REASON_RECENT_APPS.equals(reason)) {
onRecentApps();
}
}
}
private void startSelfFromPendingIntent() {
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setComponent(new ComponentName(this, MainActivity.class));
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
try {
pendingIntent.send();
} catch (Exception e) {
Log.e(TAG, "stayTop fail");
}
}