0

現在、アプリケーション アップグレード レシーバーが複数回呼び出されるアプリケーションの問題に直面しています。以下はマニフェスト コードです。

<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 である理由がわかりません。どんな助けでも大歓迎です。

4

1 に答える 1