4

電話のメモリにインストールされ、SD カードに移動可能なアプリのリストを特定したいと考えています。次の関数を使用して、インストールされているアプリのリストを取得しています。

InstalledAppDetails の Android ソース コードを確認しましたが、解決策を取得できません。

事前の感謝

private List<App> loadInstalledApps(boolean includeSysApps) 
   {
       List<App> apps = new ArrayList<App>();

       //   the package manager contains the information about all installed apps
       PackageManager packageManager = getPackageManager();

       List<PackageInfo> packs = packageManager.getInstalledPackages(0); //PackageManager.GET_META_DATA 

       for(int i = 0; i < packs.size(); i++) 
       {
           PackageInfo p = packs.get(i);
           ApplicationInfo a = p.applicationInfo;
           // skip system apps if they shall not be included
           if ((!includeSysApps) && ((a.flags & ApplicationInfo.FLAG_SYSTEM) == 1)) 
           {
               continue;
           }

           App app = new App();
           app.setTitle(p.applicationInfo.loadLabel(packageManager).toString());
           app.setPackageName(p.packageName);
           app.setVersionName(p.versionName);
           app.setVersionCode(p.versionCode);
           app.setInstallDir(p.applicationInfo.sourceDir);
           app.setInstallSize(calculateSize(app.getInstallDir()));
           CharSequence description = p.applicationInfo.loadDescription(packageManager);
           app.setDescription(description != null ? description.toString() : "");
           if(app.getInstallDir().contains("/mnt"))
           {
               //app on sdcard
               apps.add(app);
           }
           else
           {
               //app on phone memory
               apps.add(app);
           }        
       }
       return apps;
   }
4

1 に答える 1

2

アプリのインストール場所は、アプリのAndroidManifest.xmlで指定されます。詳細については、こちらをご覧ください。要するに:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="preferExternal"
... >

また

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="auto"
... >

これautoは、アプリが外部デバイスにインストールされている可能性があるが、設定がないことを意味します。preferExternal可能な場合はアプリが外部デバイスにインストールされることを意味します

覚えておいてください...

この属性を宣言しない場合、アプリケーションは内部ストレージにのみインストールされ、外部ストレージに移動することはできません。

したがって、問題は、アプリからandroidManifest.xmlファイルを取得する方法です。さて、あなたはAPKからそれを取ることができます(インストール後に削除されていない場合)。その問題については、この投稿を見てください:.apkパッケージ内のAndroidManifest.xmlファイルを解析する方法

最後に、xmlの解析に関するすばらしいトピックもこの投稿にあります。android:installLocationマニフェスト属性へのアクセス

乾杯、アルド

于 2012-06-08T04:13:25.297 に答える