文章目录

前言

监听顶部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
暂无评论...