PACKAGE_REPLACEDを処理するようにBroadcastReceiverを設定したいのですが、パッケージが交換されたときにのみ通知を受け取りたいのです。スキーム="package"でデータタグを指定すると正常に機能しますが、アプリケーションが再インストールまたはアップグレードされると通知が届きます。スキーム固有の部分にあるパッケージ名をどのように指定する必要があるのかわかりません。つまり、BroadcastReceiverがonRecieve()でインテントを取得するときに、intent.getData()。getSchemeSpecificPart( )、それはパッケージ名ですが、インテントフィルターでそれだけをフィルターできる方法はありますか?
1030 次
2 に答える
1
Google検索アプリで使用される場合:
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" android:path="com.google.android.googlequicksearchbox" />
</intent-filter>
しかし、私の大まかなテストによると、これでも更新されたパッケージをキャッチできるため、「android:path」の部分は実際には役に立たなくなります。
Android 3.1以降の場合、この新しいアクションを使用して、パッケージが更新されたときにのみ応答できます。
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
Android 2.xに戻る必要がある場合は、との2つの個別のレシーバーを宣言することをお勧めしPACKAGE_REPLACED
ますMY_PACKAGE_REPLACED
。次に、最初の実行時に、ランタイムAndroidバージョンを確認し、バージョンが3.1以降の場合は古いバージョンを無効にします。
于 2013-01-24T17:09:45.457 に答える
0
あなたが言うようにスキームでブロードキャストインテントを受け入れるのが最も簡単ですが、アクションで送信されるエクストラにpackage
基づいてフィルタリングを行います。Intent
PACKAGE_*
のパッケージ名がIntent
自分のものと一致しない場合は、無視してください。
于 2010-02-03T23:53:46.550 に答える