3

ユーザーがデバイスでアプリをアンインストールするときにイベントをキャプチャする次のブロードキャスト レシーバーがあります。技術的には、アクションACTION_PACKAGE_REMOVEDでインテントを受信して​​います。

public class appUninstallReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent)
    {
        if (intent != null) {
            if (intent.getAction().equals(intent.ACTION_PACKAGE_REMOVED))   {
                try {
                   String packageName = intent.getData().toString();
                   //Logcat shows the packageName is "com.XXX.YYY"
                   Log.v("debug",packageName);

                   PackageManager packageManager = context.getPackageManager();
                   PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0);
                   //Got NameNotFoundException
                   Log.v("debug",packageInfo.versionName);

                }catch(NameNotFoundException e){
                     e.printStackTrace();
                }
            }
        }
    }
}

上記のレシーバーは、アンインストールするアプリ (パッケージ) のバージョン名を で抽出しようとするとpackageInfo.versionNameNameNotFoundExceptionが発生することを除いて、正常に動作します。

packageName私が得たのは「com.XXX.YYY」です。これは、アンインストールするアプリのパッケージ名とまったく同じです。しかし、上記のコードでバージョン名を取得できないのはなぜですか?

(ちなみに、上記のレシーバーはアプリのアンインストールが開始されるとトリガーされますが、システムがアンインストールを開始する前にメタデータを既に削除しているためですか?)

4

3 に答える 3

-1

アンインストールされているアプリのパッケージ名を取得するには、次のコードを試してください。

Uri uri = intent.getData();
    String pkg = uri != null ? uri.getSchemeSpecificPart() : null;
    System.out.println("Pakcge Removed: " + pkg);
于 2014-05-22T16:51:32.603 に答える