現在、アプリケーション アップグレード レシーバーが複数回呼び出されるアプリケーションの問題に直面しています。以下はマニフェスト コードです。
<receiver android:name=".receiver.UpgradeReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" android:path="com.example" />
</intent-filter>
</receiver>
UpgradeReceiver.java
public Context context;
private static final String TAG = "UpgradeReceiver";
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
if (null == intent) {
return;
}
String action = intent.getAction();
Log.i(TAG, "Upgrade_Intent_Package[" + intent.getPackage() + "]");
Bundle bundle = intent.getExtras();
StringBuilder str = new StringBuilder();
if (bundle != null) {
Set<String> keys = bundle.keySet();
Iterator<String> it = keys.iterator();
while (it.hasNext()) {
String key = it.next();
str.append(key);
str.append(":");
str.append(bundle.get(key));
}
}
Log.i(TAG, str.toString());
if (Constants.UPGRADE_COMPLETED.equalsIgnoreCase(action)) {
}
}
}
アプリケーションがアップグレードされたときにのみレシーバーが実行されるように、アプリケーション パッケージでアップグレード ブロードキャスト インテントをフィルタリングしようとしています。
マニフェストの path タグの下にアプリケーション パッケージ名を設定しようとしましたが、役に立ちませんでした。さらに、intent.getPackage()を使用してインテントからパッケージ名を抽出しようとしましたが、null が返されます。ただし、Android は次のように述べています。
ブロードキャスト アクション: アプリケーション パッケージの新しいバージョンがインストールされ、以前にインストールされた既存のバージョンが置き換えられました。データにはパッケージの名前が含まれています。
アプリケーション パッケージ名が null である理由がわかりません。どんな助けでも大歓迎です。