在Android中获取运行应用程序的前景

时间:2017-01-12 19:27:20

标签: android

我在服务中使用以下代码来获取在android中运行应用程序的当前前景但是当我打开任何应用程序时它会显示我在其中进行此服务的应用程序的名称

ActivityManager am = (ActivityManager)MyService.this.getSystemService(ACTIVITY_SERVICE);
                    // The first in the list of RunningTasks is always the foreground task.
                    ActivityManager.RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0);
                    String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName();
                    PackageManager pm = MyService.this.getPackageManager();
                    PackageInfo foregroundAppPackageInfo = null;
                    try {
                        foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
                    } catch (PackageManager.NameNotFoundException e) {
                        e.printStackTrace();
                    }
                    String packageName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();

2 个答案:

答案 0 :(得分:0)

试试这段代码:

 ActivityManager mActivityManager =(ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);

if(Build.VERSION.SDK_INT > 20){
String mPackageName = mActivityManager.getRunningAppProcesses().get(0).processName;
}
else{
  String mpackageName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
}

它返回应用程序基础包名称..

答案 1 :(得分:0)

简短的回答是,你不能这样做,你不应该尝试。谷歌自5.0以来一直试图阻止这种情况,人们发现的每一种解决方法都在随后的Android版本中被禁用。您发现的任何新方法很快就会被关闭。如果你编写一个需要这种能力的应用程序,那么最好的情况是它将是一个永久性的维护噩梦。最糟糕的情况是谷歌将关闭所有漏洞,你的应用程序将变得无用。

最新的脏黑客是由开源AndroidProcesses库实现的。但正如自述文件所述,它已经无法在7.0 +中发挥作用。