检索当前在Android中运行的应用程序的程序包名称

时间:2011-07-12 09:40:13

标签: android package

有人可以帮我提供有关检索当前在Android中运行的活动的软件包名称的示例代码吗?

编辑:

代码1

    ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> processes = am.getRunningAppProcesses();
    if (processes != null){
        for (int i=0; i<processes.size(); i++){
            RunningAppProcessInfo temp = processes.get(i);
            String pName = temp.processName;
            for (int k=0; k<blacklist.size(); k++){
                if (pName.equalsIgnoreCase((String)blacklist.get(k))){
                    int pid = android.os.Process.getUidForName(pName);
                    android.os.Process.killProcess(pid);
                }
            }
     }

代码2?

  int pid = temp.pid;
    String[] packages = temp.pkgList;
            for (int j=0; j<packages.length; j++){
                String packageName = packages[j];
                for (int k=0; k<blacklist.size(); k++){
                    if (packageName.equalsIgnoreCase((String)blacklist.get(k))){
                        //Android 2.2+ kill all background processes
                        am.killBackgroundProcesses(packageName);
                    }
                }
            }

假设黑色具有程序的应用程序包名称,我已将其列入黑名单并希望终止。以上哪个代码是实现我的任务杀手的正确方法。有人可以解释killBackgroundProcesses(packageName)和android.os.Process.killProcess(pid)之间的区别,因为我似乎无法区分它们。

3 个答案:

答案 0 :(得分:1)

您可以使用Android ActivityManager 上的 getRunningAppProcesses 来检索正在运行的进程列表。

点击此链接:http://developer.android.com/reference/android/app/ActivityManager.html#getRunningAppProcesses%28%29

您可以使用Android PackageManager 上的 getInstalledPackages 方法检索所有已安装应用的列表

点击此链接:http://developer.android.com/reference/android/content/pm/PackageManager.html#getInstalledPackages%28int%29

答案 1 :(得分:0)

        ActivityManager am =(ActivityManager)context.getSystemService(ACTIVITY_SERVICE);
  List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
  ActivityManager.RunningTaskInfo task = tasks.get(0); // current task
   ComponentName rootActivity = task.baseActivity;


      rootActivity.getPackageName();//*currently active applications package name*

在循环中使用此功能,您将获得所有当前正在运行的应用的包名称,以获取正在运行的应用名称,请参阅此EXAMPLE

答案 2 :(得分:0)

首先是大于20的API,然后使用波纹管代码确实有效。我使用此代码并正常工作。试试吧

String currentApp=null;
    UsageStatsManager usm= (UsageStatsManager) this.getSystemService(Context.USAGE_STATS_SERVICE);
    long time=System.currentTimeMillis();
    List<UsageStats> applist=usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,time - 1000*1000,time);
    if(applist !=null && applist.size() > 0)
    {
        SortedMap<Long,UsageStats> mySortedMap=new TreeMap<Long,UsageStats>();
        for (UsageStats usageStats : applist)
        {
            mySortedMap.put(usageStats.getLastTimeUsed(),usageStats);

        }
        if(mySortedMap != null && !mySortedMap.isEmpty())
        {
            currentApp=mySortedMap.get(mySortedMap.lastKey()).getPackageName();
        }
    }
    Log.e(TAG, "Current App in foreground is: " + currentApp);

    return currentApp;