1

PACKAGE_REPLACEDを処理するようにBroadcastReceiverを設定したいのですが、パッケージが交換されたときにのみ通知を受け取りたいのです。スキーム="package"でデータタグを指定すると正常に機能しますが、アプリケーションが再インストールまたはアップグレードされると通知が届きます。スキーム固有の部分にあるパッケージ名をどのように指定する必要があるのか​​わかりません。つまり、BroadcastReceiverがonRecieve()でインテントを取得するときに、intent.getData()。getSchemeSpecificPart( )、それはパッケージ名ですが、インテントフィルターでそれだけをフィルターできる方法はありますか?

4

2 に答える 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基づいてフィルタリングを行います。IntentPACKAGE_*

のパッケージ名がIntent自分のものと一致しない場合は、無視してください。

于 2010-02-03T23:53:46.550 に答える