デバイス上の他のアプリがインストールまたは削除されたときにブロードキャストを受信できるアプリを作成したい。
私のコード
マニフェスト内:
<receiver Android:name=".apps.AppListener">
<intent-filter Android:priority="100">
<action Android:name="Android.intent.action.PACKAGE_INSTALL"/>
<action Android:name="Android.intent.action.PACKAGE_ADDED"/>
<action Android:name="Android.intent.action.PACKAGE_REMOVED"/>
</intent-filter>
</receiver>
appListenerの場合:
import Android.content.BroadcastReceiver;
import Android.content.Context;
import Android.content.Intent;
import Android.util.Log;
public class AppListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent arg1) {
// TODO Auto-generated method stub
Log.v(TAG, "there is a broadcast");
}
}
でも放送が受けられない。この問題はアプリの権限によるものだと思いますが、何か考えはありますか?
助けてくれてありがとう。
あなたのマニフェストで:
<receiver Android:name=".apps.AppListener">
<intent-filter Android:priority="100">
<action Android:name="Android.intent.action.PACKAGE_INSTALL"/>
<action Android:name="Android.intent.action.PACKAGE_ADDED"/>
<action Android:name="Android.intent.action.PACKAGE_REMOVED"/>
</intent-filter>
</receiver>
Intent-filterタグの前に行を追加します
<data Android:scheme="package"/>
したがって、マニフェストは次のようになります。
<receiver Android:name=".apps.AppListener">
<intent-filter Android:priority="100">
<action Android:name="Android.intent.action.PACKAGE_INSTALL"/>
<action Android:name="Android.intent.action.PACKAGE_ADDED"/>
<action Android:name="Android.intent.action.PACKAGE_REMOVED"/>
<data Android:scheme="package"/>
</intent-filter>
</receiver>
そのPACKAGE_REMOVEDインテントが実際に利用可能であるかどうかはわかりません。
Android.intent.action.PACKAGE_INSTALLは廃止する必要があります。これは、システム専用であるため推奨されなくなりました。それ以外はすべて完璧であり、100ではなく999を使用することをお勧めします。ドキュメントでは、使用する最大数または最小数を示していません。数値が大きいほど、優先度が高くなり、その目的のためのレシーバーになります。翻訳者ごめんなさい。私はスペイン語で話したり書いたりします。 情報
<receiver Android:name=".apps.AppListener">
<intent-filter Android:priority="999">
<action Android:name="Android.intent.action.PACKAGE_ADDED"/>
<action Android:name="Android.intent.action.PACKAGE_REMOVED"/>
<data Android:scheme="package"/>
</intent-filter>
すばらしい答え、あと1つだけ残っています。
アプリを更新するたびに、最初にACTION_PACKAGE_REMOVEDが呼び出され、次にACTION_PACKAGE_ADDEDが呼び出されます。これらのイベントを無視する場合は、onReceive()に追加します。
if(!(intent.getExtras() != null &&
intent.getExtras().containsKey(Intent.EXTRA_REPLACING) &&
intent.getExtras().getBoolean(Intent.EXTRA_REPLACING, false))) {
//DO YOUR THING
}
これはドキュメントからです:
EXTRA_REPLACING APIレベル3で追加されました。文字列EXTRA_REPLACING ACTION_PACKAGE_REMOVEDインテントのブール型の追加フィールドとして使用され、これがパッケージの置き換えであることを示します。このため、このブロードキャストの直後に、同じパッケージの異なるバージョンの追加ブロードキャストが続きます。定数値:「Android.intent.extra.REPLACING」