如何使用进程ID打开应用程序信息(设置)

时间:2014-02-04 11:22:04

标签: android android-intent

我想以编程方式打开应用信息页面。

其中(强制停止,卸载,清除数据,清除缓存)选项可用。我在列表中有正在运行的进程ID。

现在,当我点击列表项时,我正在尝试打开应用信息。我搜索了很多但却找不到任何与之相关的话题。

1 个答案:

答案 0 :(得分:2)

  1. 使用getAppNameFromPID(int PID)获取包名称
  2. 使用showInstalledAppDetails(String packageName)启动应用信息/详细信息设置页面。
  3. 这两种方法应该像这样创建:

    public void showInstalledAppDetails(String packageName) {
        Intent intent = new Intent();
    
        if (Build.VERSION.SDK_INT >= 9) { //this supports all API levels
            intent.setAction(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            intent.setData(Uri.parse("package:" + packageName));
        } else {
            final String appPkgName = (apiLevel == 8 ? "pkg" : "com.android.settings.ApplicationPkgName");
            intent.setAction(Intent.ACTION_VIEW);
            intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
            intent.putExtra(appPkgName, packageName);
        }
        startActivity(intent);
    }
    
    private String getAppName(int pID)
    {
        ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
        List list = am.getRunningAppProcesses();
        Iterator i = list.iterator();
        PackageManager pm = this.getPackageManager();
        while(i.hasNext()) {
            ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next());
            try { 
                if(info.pid == pID) //see *NOTE: you might need to compare with info.pkgList
                    return info.processName;
            } catch(Exception e) {
                Log.d("getAppName", "Error>> :"+ e.toString());
            }
        }
        return "";
    }
    

    每种方法似乎都是单独工作的,我认为这种方法可以满足您的需求。

    *注意:如果进程名称与包名称不同(例如,它是具有不同包名称的服务),则不起作用。您可能需要调整getAppName以与info.pkgList中的字符串[]进行比较。如果有效,请告诉我们。