概述 工作中有一个场景是只要返回桌面,重新回到A页面时会有个锁屏页面B,必须输入密码才可以进入A页面,现在是返回桌面的处理问题,首要想到监听home键,再判定当前最顶层页面是不是桌面即可
方法: 1,onUserLeaveHint方法,但是有个问题就是跳转其他app也会触发,因此不行
//在基类BaseActivity重写方法监听
@Override
protected void onUserLeaveHint() {
super.onUserLeaveHint();
i("onUserLeaveHint", "返回桌面,当前是不是桌面:" + isHome());
}
2,系统按键广播监听,但是也有问题,就是现在都是用的手势导航,没用三键导航,这个又不行了 2.1,自定义广播 ACTION_CLOSE_SYSTEM_DIALOGS+SYSTEM_REASON+homekey在onReceive方法中处理
2.2,注册和注销一下
3,判定当前是否桌面+onUserLeaveHint在一起监听
@Override
protected void onUserLeaveHint() {
super.onUserLeaveHint();
i("onUserLeaveHint", "返回桌面,当前是不是桌面:" + isHome());
if (isHome()) {
//这里就是回到桌面的处理逻辑
}
}
private List<String> getActivities() {
List<String> names = new ArrayList<>();
PackageManager packageManager = this.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resolveInfos) {
names.add(resolveInfo.activityInfo.packageName);
}
return names;
}
//判断当前界面是否是桌面
private boolean isHome() {
ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTaskInfos = mActivityManager.getRunningTasks(1);
return getActivities().contains(runningTaskInfos.get(0).topActivity.getPackageName());
}
|