Androidは携帯電話にapkがインストールされている一般的な操作です

2090 ワード

携帯電話にApkがインストールされているContextを取得する方法
context.createPackageContext(packageName,flags);

packageName:   
flags: 
1.packageName    ,   Context   
2.flags     , CONTEXT_INCLUDE_CODE CONTEXT_IGNORE_SECURITY    。
              CONTEXT_INCLUDE_CODE        ,                。
              CONTEXT_IGNORE_SECURITY          ,          ,         ,       。

携帯電話にインストールされているApp情報を取得
PackageManager pm = getPackageManager();
List installedPackages = pm.getInstalledPackages(PackageManager.GET_META_DATA);


他のAppのAndroidManifestを取得します.xml中アプリケーションノード下meta-dataデータ
ApplicationInfo appInfo = packageInfo.applicationInfo;
String meta = appInfo.metaData.getString("EZWEATHER_PLUGIN");

携帯電話にインストールされている他のApkリソースを取得
Resources resources = pm.getResourcesForApplication(packageName); 
int id = resources.getIdentifier("preview_image", "drawable", appInfo.packageName);

まとめ
PackageManager pm = getPackageManager();
List installedPackages = pm.getInstalledPackages(PackageManager.GET_META_DATA);
for (PackageInfo packageInfo : installedPackages) {
    ApplicationInfo appInfo = packageInfo.applicationInfo;
    if (null != packageInfo && null != appInfo.metaData) {
        String meta = appInfo.metaData.getString("WEATHER_PLUGIN");

        if ("mobi.infolife.ezweather.plugin.widget".equals(meta)) {
            Log.d(TAG, "      ");
            Log.d(TAG, "   " + packageInfo.packageName);
            try {
                Resources resources = pm.getResourcesForApplication(appInfo);
                int id = resources.getIdentifier("preview_image", "drawable", appInfo.packageName);
                tv.setCompoundDrawablesWithIntrinsicBounds(ContextCompat.getDrawable(this, id), null, null, null);
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }

        }
    }

}