我希望有一个在后台运行的应用程序,它知道何时运行任何内置应用程序(消息,联系人等)。

所以我的问题是:

  • 我应该如何在后台运行我的应用程序。
  • 我的后台应用程序如何知道当前在前台运行的应用程序是什么。

  • 有经验的人们的回应将不胜感激。

    最佳答案

    关于“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" />
    

    08-18 20:13
    查看更多