android监听应用程序启动

Posted

技术标签:

【中文标题】android监听应用程序启动【英文标题】:android listen for app launch 【发布时间】:2011-11-27 15:08:17 【问题描述】:

我需要开发一个服务来监听每个活动的开始。 我必须这样做吗?

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses();
for (int i = 0; i < runningAppProcessInfo.size(); i++) 
    Log.v("Proc: ", runningAppProcessInfo.get(i).processName);

我需要每 X 秒执行一次吗?会影响电池消耗吗?

【问题讨论】:

附加信息:ActivityManager.getRunningTasks(1) 将返回正在运行的任务列表中的第一个任务。这项任务似乎总是在前台。 【参考方案1】:

据我所知,目前没有办法监听应用程序的启动,除非它是第一次启动。 ACTION_PACKAGE_FIRST_LAUNCH(广播操作:在应用程序首次启动时(即第一次从停止状态移出)发送到应用程序的安装程序包。

所以我想你的解决方案是目前最好的解决方案。

【讨论】:

【参考方案2】:

据我所知,IActivityController.Stub 包中有一个类 IActivityController.Stub。 但这是一个@hide 接口(有人说有一些方法可以访问@hide api)。

我们可以像这样设置一个 Listener 来监听 Activity 开关:

mAm = ActivityManagerNative.getDefault();          
    try 
        mAm.setActivityController(new ActivityController());

    catch (RemoteException e) 
        System.err.println("** Failed talking with activity manager!");

ActivityManagerNative 类也是@hide。 ActivityController 是一个扩展 IActivityController.Stub 的类。

如何访问@hide Api:

    您可以获取android源代码来构建一个have-@hide-api Android.jar来使用。 通过反思。

【讨论】:

关于这一点的注意事项:在现代版本的 Android 上,调用 setActivityController 需要 SET_ACTIVITY_WATCHER 权限,这要求您的应用程序使用用于签署 Android 框架的密钥进行签名,这不是如果您正在开发旨在在所有 ROM 上运行的第三方应用程序,这真的是可能的。

以上是关于android监听应用程序启动的主要内容,如果未能解决你的问题,请参考以下文章

android 监听屏幕是不是被触碰过?

Android性能优化--冷启动优化(Application)

Android相机按钮半按监听器

带有 apollo 的 android mqtt-client-1.5 监听器

Android实战开发篇 全网最详细广播监听应用APK卸载覆盖安装!!!

2018年Android的保活方案效果统计