{"id":8982,"date":"2023-09-18T23:49:00","date_gmt":"2023-09-18T15:49:00","guid":{"rendered":"\/?p=8982"},"modified":"2023-09-18T23:49:00","modified_gmt":"2023-09-18T15:49:00","slug":"packagemanager%e8%af%a6%e8%a7%a3","status":"publish","type":"post","link":"\/?p=8982","title":{"rendered":"PackageManager\u8be6\u89e3"},"content":{"rendered":"<h2>\u6982\u8ff0<\/h2>\n<p>\u4eca\u5929\u8981\u8bb2\u7684\u662fPackageManager\u3002Android\u7cfb\u7edf\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u5f88\u591a\u670d\u52a1\u7ba1\u7406\u7684\u7c7b\uff0c\u5305\u62ecActivityManager\u3001PowerManager(\u7535\u6e90\u7ba1\u7406)\u3001AudioManager(\u97f3\u9891\u7ba1\u7406)\u7b49\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u8fd8\u63d0\u4f9b\u4e86\u4e00\u4e2aPackageManger\u7ba1\u7406\u7c7b\uff0c\u5b83\u7684\u4e3b\u8981\u804c\u8d23\u662f\u7ba1\u7406\u5e94\u7528\u7a0b\u5e8f\u5305\u3002 \u901a\u8fc7PackageManager\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u83b7\u53d6\u5e94\u7528\u7a0b\u5e8f\u4fe1\u606f\u3002<\/p>\n<p>\u3000\u3000\u63d0\u5230PackageManager\uff0c\u5c31\u5f97\u63d0\u4e00\u4e0bAndroidManifest.XML\u6587\u4ef6\u4e86\u3002AndroidManifest.xml\u662fAndroid\u5e94\u7528\u7a0b\u5e8f\u4e2d\u6700\u91cd\u8981\u7684\u6587\u4ef6\u4e4b\u4e00\u3002\u5b83\u662fAndroid\u7a0b\u5e8f\u7684\u5168\u5c40\u914d\u7f6e\u6587\u4ef6\uff0c\u662f\u6bcf\u4e2a android\u7a0b\u5e8f\u4e2d\u5fc5\u987b\u7684\u6587\u4ef6\u3002\u5b83\u4f4d\u4e8e\u6211\u4eec\u5f00\u53d1\u7684\u5e94\u7528\u7a0b\u5e8f\u7684\u6839\u76ee\u5f55\u4e0b\uff0c\u63cf\u8ff0\u4e86package\u4e2d\u7684\u5168\u5c40\u6570\u636e\uff0c\u5305\u62ecpackage\u4e2d\u66b4\u9732\u7684\u7ec4\u4ef6 \uff08activities, services, \u7b49\u7b49\uff09\uff0c\u4ee5\u53ca\u4ed6\u4eec\u5404\u81ea\u7684\u5b9e\u73b0\u7c7b\uff0c\u5404\u79cd\u80fd\u88ab\u5904\u7406\u7684\u6570\u636e\u548c\u542f\u52a8\u4f4d\u7f6e\u7b49\u91cd\u8981\u4fe1\u606f\u3002<br \/>\n\u3000\u3000\u56e0\u6b64\uff0c\u8be5\u6587\u4ef6\u63d0\u4f9b\u4e86Android\u7cfb\u7edf\u6240\u9700\u8981\u7684\u5173\u4e8e\u8be5\u5e94\u7528\u7a0b\u5e8f\u7684\u5fc5\u8981\u4fe1\u606f\uff0c\u5373\u5728\u8be5\u5e94\u7528\u7a0b\u5e8f\u7684\u4efb\u4f55\u4ee3\u7801\u8fd0\u884c\u4e4b\u524d\u7cfb\u7edf\u6240\u5fc5\u987b\u62e5\u6709\u7684\u4fe1\u606f\u3002<\/p>\n<p>\u3000\u3000PackageManager\u83b7\u53d6\u7684\u4fe1\u606f\u5373\u6765\u81eaAndroidManifest.XML\u3002\u4e3a\u4e86\u4fbf\u4e8e\u7406\u89e3\uff0c\u4ece\u7f51\u4e0a\u627e\u4e86\u4e00\u5f20AnroidManifest.xml\u6587\u4ef6\u8282\u70b9\u8bf4\u660e\u56fe\uff1a<\/p>\n<p><img src=\"https:\/\/lemon-guess.oss-cn-hangzhou.aliyuncs.com\/img\/241503542538902.gif\" alt=\"img\" \/><\/p>\n<h2><strong>\u4e00\u3001PackageManager\u7684\u529f\u80fd\uff1a<\/strong><\/h2>\n<p>1\u3001\u5b89\u88c5\uff0c\u5378\u8f7d\u5e94\u7528<br \/>\n2\u3001\u67e5\u8be2permission\u76f8\u5173\u4fe1\u606f<br \/>\n3\u3001\u67e5\u8be2Application\u76f8\u5173\u4fe1\u606f(application\uff0cactivity\uff0creceiver\uff0cservice\uff0cprovider\u53ca\u76f8\u5e94\u5c5e\u6027\u7b49\uff09<br \/>\n4\u3001\u67e5\u8be2\u5df2\u5b89\u88c5\u5e94\u7528<br \/>\n5\u3001\u589e\u52a0\uff0c\u5220\u9664permission<br \/>\n6\u3001\u6e05\u9664\u7528\u6237\u6570\u636e\u3001\u7f13\u5b58\uff0c\u4ee3\u7801\u6bb5\u7b49 <\/p>\n<h2><strong>\u4e8c\u3001PackageManager\u76f8\u5173\u7c7b\u548c\u65b9\u6cd5\u4ecb\u7ecd\uff1a<\/strong><\/h2>\n<h3>1\u3001PackageManager\u7c7b<\/h3>\n<pre><code class=\"language-java\">\u8bf4\u660e\uff1a \u83b7\u5f97\u5df2\u5b89\u88c5\u7684\u5e94\u7528\u7a0b\u5e8f\u4fe1\u606f \u3002\u53ef\u4ee5\u901a\u8fc7getPackageManager()\u65b9\u6cd5\u83b7\u5f97\u3002 \n\n\u5e38\u7528\u65b9\u6cd5\uff1a \npublic abstract PackageManager getPackageManager()  \n\u529f\u80fd\uff1a\u83b7\u5f97\u4e00\u4e2aPackageManger\u5bf9\u8c61  \n\npublic abstract Drawable getApplicationIcon(String packageName)\n\u53c2\u6570\uff1a packageName \u5305\u540d\n\u529f\u80fd\uff1a\u8fd4\u56de\u7ed9\u5b9a\u5305\u540d\u7684\u56fe\u6807\uff0c\u5426\u5219\u8fd4\u56denull\n\npublic abstract ApplicationInfo getApplicationInfo(String packageName, int flags)\n\u53c2\u6570\uff1a\n\u3000\u3000packagename \u5305\u540d\n\u3000\u3000flags \u8be5ApplicationInfo\u662f\u6b64flags\u6807\u8bb0\uff0c\u901a\u5e38\u53ef\u4ee5\u76f4\u63a5\u8d4b\u4e88\u5e38\u65700\u5373\u53ef\n\u529f\u80fd\uff1a\u8fd4\u56de\u8be5ApplicationInfo\u5bf9\u8c61\n\npublic abstract List&lt;ApplicationInfo&gt; getInstalledApplications(int flags)\n\u53c2\u6570\uff1a\n\u3000\u3000flag\u4e3a\u4e00\u822c\u4e3aGET_UNINSTALLED_PACKAGES\uff0c\u90a3\u4e48\u6b64\u65f6\u4f1a\u8fd4\u56de\u6240\u6709ApplicationInfo\u3002\u6211\u4eec\u53ef\u4ee5\u5bf9ApplicationInfo\n\u3000\u3000\u7684flags\u8fc7\u6ee4,\u5f97\u5230\u6211\u4eec\u9700\u8981\u7684\u3002\n\u529f\u80fd\uff1a\u8fd4\u56de\u7ed9\u5b9a\u6761\u4ef6\u7684\u6240\u6709PackageInfo\n\npublic abstract List&lt;PackageInfo&gt; getInstalledPackages(int flags) \n\u53c2\u6570\u5982\u4e0a\n\u529f\u80fd\uff1a\u8fd4\u56de\u7ed9\u5b9a\u6761\u4ef6\u7684\u6240\u6709PackageInfo\n\npublic abstract ResolveInfo resolveActivity(Intent intent, int flags)\n\u53c2\u6570\uff1a  \n\u3000\u3000intent \u67e5\u5bfb\u6761\u4ef6\uff0cActivity\u6240\u914d\u7f6e\u7684action\u548ccategory\n\u3000\u3000flags\uff1a MATCH_DEFAULT_ONLY     \uff1aCategory\u5fc5\u987b\u5e26\u6709CATEGORY_DEFAULT\u7684Activity\uff0c\u624d\u5339\u914d\n\u3000\u3000\u3000\u3000\u3000\u3000 GET_INTENT_FILTERS     \uff1a\u5339\u914dIntent\u6761\u4ef6\u5373\u53ef\n\u3000\u3000\u3000\u3000\u3000\u3000 GET_RESOLVED_FILTER    \uff1a\u5339\u914dIntent\u6761\u4ef6\u5373\u53ef\n\u529f\u80fd \uff1a\u8fd4\u56de\u7ed9\u5b9a\u6761\u4ef6\u7684ResolveInfo\u5bf9\u8c61(\u672c\u8d28\u4e0a\u662fActivity)\n\npublic abstract List&lt;ResolveInfo&gt; queryIntentActivities(Intent intent, int flags)\n\u53c2\u6570\u540c\u4e0a\n\u529f\u80fd \uff1a\u8fd4\u56de\u7ed9\u5b9a\u6761\u4ef6\u7684\u6240\u6709ResolveInfo\u5bf9\u8c61(\u672c\u8d28\u4e0a\u662fActivity)\uff0c\u96c6\u5408\u5bf9\u8c61\n\npublic abstract ResolveInfo resolveService(Intent intent, int flags)\n\u53c2\u6570\u540c\u4e0a\n\u529f\u80fd \uff1a\u8fd4\u56de\u7ed9\u5b9a\u6761\u4ef6\u7684ResolveInfo\u5bf9\u8c61(\u672c\u8d28\u4e0a\u662fService)\n\npublic abstract List&lt;ResolveInfo&gt; queryIntentServices(Intent intent, int flags)\n\u53c2\u6570\u540c\u4e0a\n\u529f\u80fd \uff1a\u8fd4\u56de\u7ed9\u5b9a\u6761\u4ef6\u7684\u6240\u6709ResolveInfo\u5bf9\u8c61(\u672c\u8d28\u4e0a\u662fService)\uff0c\u96c6\u5408\u5bf9\u8c61<\/code><\/pre>\n<h3>2\u3001PackageItemInfo\u7c7b<\/h3>\n<pre><code class=\"language-java\">\u8bf4\u660e\uff1a AndroidManifest.xml\u6587\u4ef6\u4e2d\u6240\u6709\u8282\u70b9\u7684\u57fa\u7c7b\uff0c\u63d0\u4f9b\u4e86\u8fd9\u4e9b\u8282\u70b9\u7684\u57fa\u672c\u4fe1\u606f\uff1alabel\u3001icon\u3001 meta-data\u3002\u5b83\u5e76\u4e0d\u76f4\u63a5\u4f7f\u7528\uff0c\u800c\u662f\u7531\u5b50\u7c7b\u7ee7\u627f\u7136\u540e\u8c03\u7528\u76f8\u5e94\u65b9\u6cd5\u3002<\/code><\/pre>\n<h3>3\u3001ApplicationInfo\u7c7b \u7ee7\u627f\u81ea PackageItemInfo\u7c7b<\/h3>\n<pre><code class=\"language-java\">\u8bf4\u660e\uff1a\u83b7\u53d6\u4e00\u4e2a\u7279\u5b9a\u5f15\u7528\u7a0b\u5e8f\u4e2d&lt;application&gt;\u8282\u70b9\u7684\u4fe1\u606f\u3002\n\n\u5b57\u6bb5\u8bf4\u660e\uff1a\n        flags\u5b57\u6bb5\uff1a FLAG_SYSTEM\u3000\u7cfb\u7edf\u5e94\u7528\u7a0b\u5e8f\n                    FLAG_EXTERNAL_STORAGE\u3000\u8868\u793a\u8be5\u5e94\u7528\u5b89\u88c5\u5728sdcard\u4e2d\n\n\u5e38\u7528\u65b9\u6cd5\u7ee7\u627f\u81f3PackageItemInfo\u7c7b\u4e2d\u7684loadIcon()\u548cloadLabel()<\/code><\/pre>\n<h3>4\u3001ActivityInfo\u7c7b \u7ee7\u627f\u81ea PackageItemInfo\u7c7b<\/h3>\n<pre><code class=\"language-java\">\u8bf4\u660e\uff1a \u83b7\u5f97\u5e94\u7528\u7a0b\u5e8f\u4e2d&lt;activity\/&gt;\u6216\u8005 &lt;receiver\/&gt;\u8282\u70b9\u7684\u4fe1\u606f \u3002\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5b83\u6765\u83b7\u53d6\u6211\u4eec\u8bbe\u7f6e\u7684\u4efb\u4f55\u5c5e\u6027\uff0c\u5305\u62ectheme \u3001launchMode\u3001launchmode\u7b49\n\n\u5e38\u7528\u65b9\u6cd5\u7ee7\u627f\u81f3PackageItemInfo\u7c7b\u4e2d\u7684loadIcon()\u548cloadLabel()<\/code><\/pre>\n<h3>5\u3001ServiceInfo\u7c7b \u7ee7\u627f\u81ea PackageItemInfo\u7c7b<\/h3>\n<pre><code class=\"language-java\">\u8bf4\u660e\uff1a\u4e0eActivityInfo\u7c7b\u4f3c\uff0c\u4ee3\u8868&lt;service&gt;\u8282\u70b9\u4fe1\u606f<\/code><\/pre>\n<h3>6\u3001ResolveInfo\u7c7b<\/h3>\n<pre><code class=\"language-java\">\u8bf4\u660e\uff1a\u6839\u636e&lt;intent&gt;\u8282\u70b9\u6765\u83b7\u53d6\u5176\u4e0a\u4e00\u5c42\u76ee\u5f55\u7684\u4fe1\u606f\uff0c\u901a\u5e38\u662f&lt;activity&gt;\u3001&lt;receiver&gt;\u3001&lt;service&gt;\u8282\u70b9\u4fe1\u606f\u3002\n\u5e38\u7528\u65b9\u6cd5\u6709loadIcon(PackageManager pm)\u548cloadLabel(PackageManager pm)<\/code><\/pre>\n<h2><strong>\u4e09\u3001\u5b9e\u4f8b\u8bb2\u89e3\uff1a<\/strong><\/h2>\n<p>1\u3001\u901a\u8fc7PackageManager\u7684queryIntentActivities\u65b9\u6cd5\uff0c\u67e5\u8be2\u7cfb\u7edf\u4e2d\u6240\u6709\u6ee1\u8db3ACTION_MAIN\u548cCATEGORY_LAUNCHER\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u83b7\u53d6\u4ed6\u4eec\u7684\u7a0b\u5e8f\u540d\u3001\u5305\u540d\u3001\u5165\u53e3\u7c7b\u540d\u3002\uff08\u6c34\u5e73\u6709\u9650\uff0cListView\u6ca1\u5b66\u597d\uff0c\u4e0d\u80fd\u505a\u4e00\u4e2a\u7b80\u6613\u542f\u52a8\u5668\uff0c\u4e0d\u8fc7\u542f\u52a8\u5e94\u7528\u7684\u539f\u7406\u5728\u4e4b\u524d\u7684\u6587\u7ae0\u4e2d\u6709\u63d0\u5230\uff0c\u6709\u5174\u8da3\u7684\u53ef\u4ee5\u53bb\u770b\u770b\uff1a<a href=\"http:\/\/www.cnblogs.com\/travellife\/p\/3930179.html\">Android\u968f\u7b14\u4e4b\u2014\u2014Activity\u4e2d\u542f\u52a8\u53e6\u4e00\u5e94\u7528<\/a>\uff09<\/p>\n<p><code>MainActivity.java<\/code><\/p>\n<pre><code class=\"language-java\">package com.example.packagemanager;\n\nimport java.util.Collections;\nimport java.util.List;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimport android.content.pm.ResolveInfo;\nimport android.os.Bundle;\n\npublic class MainActivity extends Activity {\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n        getAppInfo();\n    }\n\n    private void getAppInfo() {\n        \/\/ \u83b7\u53d6PackageManager\u5bf9\u8c61\n        PackageManager pm = this.getPackageManager();\n        \/\/ \u8bbe\u7f6e&lt;intent-filter&gt;\u6807\u7b7e\u5185\u9700\u8981\u6ee1\u8db3\u7684\u6761\u4ef6\n        Intent intent = new Intent(Intent.ACTION_MAIN, null);\n        intent.addCategory(Intent.CATEGORY_DEFAULT);\n\n        \/\/ \u901a\u8fc7queryIntentActivities\u83b7\u53d6ResolveInfo\u5bf9\u8c61\n        List&lt;ResolveInfo&gt; resolveInfos = pm.queryIntentActivities(intent,\n                PackageManager.MATCH_DEFAULT_ONLY);\n\n        \/\/ \u8c03\u7528\u7cfb\u7edf\u6392\u5e8f\uff0c\u6839\u636ename\u6392\u5e8f\n        \/\/ \u8be5\u6392\u5e8f\u5f88\u91cd\u8981\uff0c\u5426\u5219\u53ea\u80fd\u663e\u793a\u7cfb\u7edf\u5e94\u7528\uff0c\u4e0d\u80fd\u663e\u793a\u7b2c\u4e09\u65b9\u5e94\u7528\n        \/\/ \u5176\u5b9e\u6211\u6d4b\u8bd5\u53d1\u73b0\u6709\u6ca1\u6709\u5176\u5b9e\u662f\u4e00\u6837\u7684\uff0c\u5c31\u662f\u8f93\u51fa\u7684\u987a\u5e8f\u662f\u4e71\u7684\n        Collections.sort(resolveInfos,\n                new ResolveInfo.DisplayNameComparator(pm));\n\n        for (ResolveInfo resolveInfo : resolveInfos) {\n            String appName = resolveInfo.loadLabel(pm).toString();\/\/ \u83b7\u53d6\u5e94\u7528\u540d\u79f0\n            String packageName = resolveInfo.activityInfo.packageName;\/\/ \u5305\u540d\n            String className = resolveInfo.activityInfo.name;\/\/ \u5165\u53e3\u7c7b\u540d\n            System.out.println(&quot;\u7a0b\u5e8f\u540d\uff1a&quot; + appName + &quot; \u5305\u540d:&quot; + packageName\n                    + &quot; \u5165\u53e3\u7c7b\u540d\uff1a&quot; + className);\n        }\n    }\n\n}<\/code><\/pre>\n<p>\u8f93\u51fa\u7ed3\u679c\uff1a<\/p>\n<p><img src=\"https:\/\/lemon-guess.oss-cn-hangzhou.aliyuncs.com\/img\/241612333938824.jpg\" alt=\"img\" \/><\/p>\n<p>2\u3001\u901a\u8fc7PackageManager\u7684queryInstalledApplications\u65b9\u6cd5\uff0c\u8fc7\u6ee4\u6389\u51fa\u7cfb\u7edf\u5e94\u7528\u3001\u7b2c\u4e09\u65b9\u5e94\u7528\u3001\u5b89\u88c5\u5728SDCard\u4e0a\u7684\u5e94\u7528<\/p>\n<p><code>MainActivity.java<\/code><\/p>\n<pre><code class=\"language-java\">package com.example.packagemanager;\n\nimport java.util.Collections;\nimport java.util.List;\n\nimport android.app.Activity;\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageManager;\nimport android.os.Bundle;\nimport android.view.View;\nimport android.view.View.OnClickListener;\n\npublic class MainActivity extends Activity implements OnClickListener {\n\n    public static final int FILTER_ALL_APP = 0; \/\/ \u6240\u6709\u5e94\u7528\u7a0b\u5e8f\n    public static final int FILTER_SYSTEM_APP = 1; \/\/ \u7cfb\u7edf\u7a0b\u5e8f\n    public static final int FILTER_THIRD_APP = 2; \/\/ \u7b2c\u4e09\u65b9\u5e94\u7528\u7a0b\u5e8f\n    public static final int FILTER_SDCARD_APP = 3; \/\/ \u5b89\u88c5\u5728SDCard\u7684\u5e94\u7528\u7a0b\u5e8f\n    private PackageManager pm;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n\n        findViewById(R.id.btn_all).setOnClickListener(this);\n        findViewById(R.id.btn_system).setOnClickListener(this);\n        findViewById(R.id.btn_third).setOnClickListener(this);\n        findViewById(R.id.btn_sdcard).setOnClickListener(this);\n    }\n\n    \/**\n     * \u8fc7\u6ee4\uff0c\u9009\u62e9\u662f\u7cfb\u7edf\u5e94\u7528\u3001\u7b2c\u4e09\u65b9\u5e94\u7528\u6216\u8005SDCard\u5e94\u7528\n     *\/\n    private void filterApp(int type) {\n        \/\/ \u83b7\u53d6PackageManager\u5bf9\u8c61\n        pm = getPackageManager();\n        \/\/ \u67e5\u8be2\u5df2\u7ecf\u5b89\u88c5\u7684\u5e94\u7528\u7a0b\u5e8f\n        List&lt;ApplicationInfo&gt; applicationInfos = pm\n                .getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);\n        \/\/ \u6392\u5e8f\n        Collections.sort(applicationInfos,\n                new ApplicationInfo.DisplayNameComparator(pm));\n\n        switch (type) {\n        case FILTER_ALL_APP:\/\/ \u6240\u6709\u5e94\u7528\n            for (ApplicationInfo applicationInfo : applicationInfos) {\n                getAppInfo(applicationInfo);\n            }\n            break;\n        case FILTER_SYSTEM_APP:\/\/ \u7cfb\u7edf\u5e94\u7528\n            for (ApplicationInfo applicationInfo : applicationInfos) {\n                if ((applicationInfo.flags &amp; ApplicationInfo.FLAG_SYSTEM) != 0) {\n                    getAppInfo(applicationInfo);\n                }\n            }\n        case FILTER_THIRD_APP:\/\/ \u7b2c\u4e09\u65b9\u5e94\u7528\n\n            for (ApplicationInfo applicationInfo : applicationInfos) {\n                \/\/ \u975e\u7cfb\u7edf\u5e94\u7528\n                if ((applicationInfo.flags &amp; ApplicationInfo.FLAG_SYSTEM) &lt;= 0) {\n                    getAppInfo(applicationInfo);\n                }\n                \/\/ \u7cfb\u7edf\u5e94\u7528\uff0c\u4f46\u66f4\u65b0\u540e\u53d8\u6210\u4e0d\u662f\u7cfb\u7edf\u5e94\u7528\u4e86\n                else if ((applicationInfo.flags &amp; ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {\n                    getAppInfo(applicationInfo);\n                }\n            }\n        case FILTER_SDCARD_APP:\/\/ SDCard\u5e94\u7528\n            for (ApplicationInfo applicationInfo : applicationInfos) {\n                if (applicationInfo.flags == ApplicationInfo.FLAG_SYSTEM) {\n                    getAppInfo(applicationInfo);\n                }\n            }\n        default:\n            break;\n        }\n    }\n\n    \/**\n     * \u83b7\u53d6\u5e94\u7528\u4fe1\u606f\n     *\/\n    private void getAppInfo(ApplicationInfo applicationInfo) {\n        String appName = applicationInfo.loadLabel(pm).toString();\/\/ \u5e94\u7528\u540d\n        String packageName = applicationInfo.packageName;\/\/ \u5305\u540d\n        System.out.println(&quot;\u5e94\u7528\u540d\uff1a&quot; + appName + &quot; \u5305\u540d\uff1a&quot; + packageName);\n    }\n\n    @Override\n    public void onClick(View arg0) {\n        switch (arg0.getId()) {\n        case R.id.btn_all:\n            System.out.println(&quot;\u8f93\u51fa\u6240\u6709\u5e94\u7528\u4fe1\u606f:\\n&quot;);\n            filterApp(FILTER_ALL_APP);\n            break;\n        case R.id.btn_system:\n            System.out.println(&quot;\u8f93\u51fa\u7cfb\u7edf\u5e94\u7528\u4fe1\u606f:\\n&quot;);\n            filterApp(FILTER_SYSTEM_APP);\n            break;\n        case R.id.btn_third:\n            System.out.println(&quot;\u8f93\u51fa\u7b2c\u4e09\u65b9\u5e94\u7528\u4fe1\u606f:\\n&quot;);\n            filterApp(FILTER_THIRD_APP);\n            break;\n        case R.id.btn_sdcard:\n            System.out.println(&quot;\u8f93\u51faSDCard\u5e94\u7528\u4fe1\u606f:\\n&quot;);\n            filterApp(FILTER_SDCARD_APP);\n            break;\n\n        default:\n            break;\n        }\n    }\n\n}<\/code><\/pre>\n<p><code>activity_main.xml<\/code><\/p>\n<pre><code class=\"language-xml\">&lt;LinearLayout xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;\n    xmlns:tools=&quot;http:\/\/schemas.android.com\/tools&quot;\n    android:layout_width=&quot;match_parent&quot;\n    android:layout_height=&quot;match_parent&quot;\n    android:orientation=&quot;vertical&quot; &gt;\n\n    &lt;Button\n        android:id=&quot;@+id\/btn_all&quot;\n        android:layout_width=&quot;match_parent&quot;\n        android:layout_height=&quot;wrap_content&quot;\n        android:text=&quot;\u6240\u6709\u5e94\u7528&quot; \/&gt;\n\n    &lt;Button\n        android:id=&quot;@+id\/btn_system&quot;\n        android:layout_width=&quot;match_parent&quot;\n        android:layout_height=&quot;wrap_content&quot;\n        android:text=&quot;\u7cfb\u7edf\u5e94\u7528&quot; \/&gt;\n\n    &lt;Button\n        android:id=&quot;@+id\/btn_third&quot;\n        android:layout_width=&quot;match_parent&quot;\n        android:layout_height=&quot;wrap_content&quot;\n        android:text=&quot;\u7b2c\u4e09\u65b9\u5e94\u7528&quot; \/&gt;\n\n    &lt;Button\n        android:id=&quot;@+id\/btn_sdcard&quot;\n        android:layout_width=&quot;match_parent&quot;\n        android:layout_height=&quot;wrap_content&quot;\n        android:text=&quot;SDCard\u5e94\u7528&quot; \/&gt;\n\n&lt;\/LinearLayout&gt;<\/code><\/pre>\n<p>\u8f6c\u8f7d\u8bf7\u8bf4\u660e\u51fa\u5904:<a href=\"https:\/\/www.cnblogs.com\/travellife\/p\/3932823.html\">Android\u968f\u7b14\u4e4b\u2014\u2014PackageManager\u8be6\u89e3 - \u767b\u5929\u8def - \u535a\u5ba2\u56ed (cnblogs.com)<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6982\u8ff0 \u4eca\u5929\u8981\u8bb2\u7684\u662fPackageManager\u3002Android\u7cfb\u7edf\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u5f88\u591a\u670d\u52a1\u7ba1\u7406\u7684\u7c7b\uff0c\u5305\u62ecActivityManager\u3001Po   \u2026 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[86],"tags":[],"_links":{"self":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts\/8982"}],"collection":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8982"}],"version-history":[{"count":1,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/8982\/revisions"}],"predecessor-version":[{"id":8983,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/8982\/revisions\/8983"}],"wp:attachment":[{"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8982"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8982"},{"taxonomy":"post_tag","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}