前言

监听顶部Activity状态,在Android开发客户定制时很常见。

如果只对自己内部应用,那通过ActivityLifecycleCallbacks即可,但这里要求是监听系统所有的Activity,当然,能做这个需求的要求是系统应用哈。

简单记录于此。

正文

 // 使用反射获取 IActivityTaskManager  Class<?> activityTaskManagerClass = Class.forName("android.app.ActivityTaskManager");  @SuppressLint("BlockedPrivateApi")  Method getServiceMethod = activityTaskManagerClass.getDeclaredMethod("getService");  IActivityTaskManager activityTaskManager = (IActivityTaskManager) getServiceMethod.invoke(null);  // 注册 TaskStackListener  activityTaskManager.registerTaskStackListener(mTaskStackListener);

设置监听

记得注销哈!!!

//任务栈监听 private final ITaskStackListener mTaskStackListener = new ITaskStackListener.Stub() {        @Override        public void onTaskStackChanged() {            Log.d(TAG, "onTaskStackChanged: ");        }         @Override        public void onActivityPinned(String s, int i, int i1, int i2) {            Log.d(TAG, "onActivityPinned: ");        }         @Override        public void onActivityUnpinned() {            Log.d(TAG, "onActivityUnpinned: ");        }         @Override        public void onActivityRestartAttempt(ActivityManager.RunningTaskInfo runningTaskInfo,                                              boolean b, boolean b1, boolean b2) {            Log.d(TAG, "onActivityRestartAttempt: ");        }         @Override        public void onActivityForcedResizable(String s, int i, int i1) {            Log.d(TAG, "onActivityForcedResizable: ");        }         @Override        public void onActivityDismissingDockedTask() {            Log.d(TAG, "onActivityDismissingDockedTask: ");        }         @Override        public void onActivityLaunchOnSecondaryDisplayFailed(ActivityManager.RunningTaskInfo runningTaskInfo,                                                              int i) {            Log.d(TAG, "onActivityLaunchOnSecondaryDisplayFailed: ");        }         @Override        public void onActivityLaunchOnSecondaryDisplayRerouted(ActivityManager.RunningTaskInfo runningTaskInfo,                                                                int i) {            // 无需处理        }         @Override        public void onTaskCreated(int taskId, ComponentName componentName) {            Log.d(TAG, "onTaskCreated componentName : " + componentName);        }         @Override        public void onTaskRemoved(int taskId) {            Log.d(TAG, "onTaskRemoved: ");        }         @Override        public void onTaskMovedToFront(ActivityManager.RunningTaskInfo runningTaskInfo) {            Log.d(TAG, "onTaskMovedToFront runningTaskInfo : " +                    (runningTaskInfo != null ? runningTaskInfo.topActivity : "null"));        }         @Override        public void onTaskDescriptionChanged(ActivityManager.RunningTaskInfo runningTaskInfo) {            Log.d(TAG, "onTaskDescriptionChanged: ");        }         @Override        public void onActivityRequestedOrientationChanged(int i, int i1) {            Log.d(TAG, "onActivityRequestedOrientationChanged: ");        }         @Override        public void onTaskRemovalStarted(ActivityManager.RunningTaskInfo runningTaskInfo) {            Log.d(TAG, "onTaskRemovalStarted: ");        }         @Override        public void onTaskProfileLocked(ActivityManager.RunningTaskInfo runningTaskInfo) {            Log.d(TAG, "onTaskProfileLocked: ");        }         @Override        public void onTaskSnapshotChanged(int i, TaskSnapshot taskSnapshot) {            Log.d(TAG, "onTaskSnapshotChanged: ");        }         @Override        public void onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo runningTaskInfo) {            Log.d(TAG, "onBackPressedOnTaskRoot: ");        }         @Override        public void onTaskDisplayChanged(int i, int i1) {            Log.d(TAG, "onTaskDisplayChanged: ");        }         @Override        public void onRecentTaskListUpdated() {            Log.d(TAG, "onRecentTaskListUpdated: ");        }         @Override        public void onRecentTaskListFrozenChanged(boolean b) {            Log.d(TAG, "onRecentTaskListFrozenChanged: ");        }         @Override        public void onTaskFocusChanged(int i, boolean b) {            Log.d(TAG, "onTaskFocusChanged: ");        }         @Override        public void onTaskRequestedOrientationChanged(int i, int i1) {            Log.d(TAG, "onTaskRequestedOrientationChanged: ");        }         @Override        public void onActivityRotation(int i) {            Log.d(TAG, "onActivityRotation: ");        }         @Override        public void onTaskMovedToBack(ActivityManager.RunningTaskInfo runningTaskInfo) {            Log.d(TAG, "onTaskMovedToBack: ");        }         @Override        public void onLockTaskModeChanged(int i) {            Log.d(TAG, "onLockTaskModeChanged: ");        }    };

日志打印

onTaskMovedToFront runningTaskInfo : ComponentInfo{com.biumall.browser/com.biumall.browser.MainActivity} onTaskMovedToFront runningTaskInfo : ComponentInfo{com.biumall.launcher/com.biumall.launcher.MainActivity} onTaskMovedToFront runningTaskInfo : ComponentInfo{com.biumall.settings/com.biumall.settings.ui.MainActivity} onTaskMovedToFront runningTaskInfo : ComponentInfo{com.biumall.launcher/com.biumall.launcher.MainActivity} onTaskMovedToFront runningTaskInfo : ComponentInfo{com.biumall.vehicle.settings/com.biumall.vehicle.settings.MainActivity}

主要是onTaskMovedToFront()这个方法中处理。

参考文章

  1. 腾讯元宝AI

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

none
暂无评论...