ユーザーがデバイスでアプリをアンインストールするときにイベントをキャプチャする次のブロードキャスト レシーバーがあります。技術的には、アクション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.versionName
、NameNotFoundExceptionが発生することを除いて、正常に動作します。
packageName
私が得たのは「com.XXX.YYY」です。これは、アンインストールするアプリのパッケージ名とまったく同じです。しかし、上記のコードでバージョン名を取得できないのはなぜですか?
(ちなみに、上記のレシーバーはアプリのアンインストールが開始されるとトリガーされますが、システムがアンインストールを開始する前にメタデータを既に削除しているためですか?)