我希望有一个在后台运行的应用程序,它知道何时运行任何内置应用程序(消息,联系人等)。
所以我的问题是:
有经验的人们的回应将不胜感激。
最佳答案
关于“2.我的后台应用程序如何才能知道当前在前台运行的应用程序是什么”。
不要使用getRunningAppProcesses()
方法,因为这会根据我的经验返回各种系统垃圾,您会得到多个包含RunningAppProcessInfo.IMPORTANCE_FOREGROUND
的结果。改用getRunningTasks()
这是我在服务中使用的代码,用于标识当前的前台应用程序,这非常容易:
ActivityManager am = (ActivityManager) AppService.this.getSystemService(ACTIVITY_SERVICE);
// The first in the list of RunningTasks is always the foreground task.
RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0);
如此,您就可以轻松访问前台应用程序/ Activity 的详细信息:
String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName();
PackageManager pm = AppService.this.getPackageManager();
PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
这需要在 Activity list 中获得额外的许可,并且可以正常运行。
<uses-permission android:name="android.permission.GET_TASKS" />