放送受信機をプログラムでアクティビティに登録しています。PACKAGE_REMOVED
これは、パッケージが削除されたときに起動するインテントに応答します。
問題は、このメッセージが表示されないことです。これは、アクティビティを終了して別のアクティビティに移動してアプリをアンインストールするとインテントが起動され、元のアクティビティが一時停止されたためだと思います。一時停止されたアクティビティ(受信者が登録解除されていない場合onPause
)も受信者を一時停止している可能性がありますか?
放送受信機をプログラムでアクティビティに登録しています。PACKAGE_REMOVED
これは、パッケージが削除されたときに起動するインテントに応答します。
問題は、このメッセージが表示されないことです。これは、アクティビティを終了して別のアクティビティに移動してアプリをアンインストールするとインテントが起動され、元のアクティビティが一時停止されたためだと思います。一時停止されたアクティビティ(受信者が登録解除されていない場合onPause
)も受信者を一時停止している可能性がありますか?
プロジェクトにReceiverを追加すると、アプリケーションを起動しなくてもこのイベントが発生します。
public class TestReciver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("TestReciver",intent.getAction()+"\n"
+intent.getDataString()+"\n"
+"UID: "+intent.getIntExtra(Intent.EXTRA_UID,0)+"\n"
+"DATA_REMOVED: "+intent.getBooleanExtra(Intent.EXTRA_DATA_REMOVED, false)+"\n"
+"REPLACING: "+intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)
);
}
}
マニフェストに次のように追加します(<application>タグ内):
<receiver android:name="TestReciver" >
<intent-filter >
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
このようなレシーバーを使用する場合、レジスターを呼び出したり、レジスターを解除したりしないため、常にデータを取得できるようになります。
ユーザーにアプリをSDカードに移動させた場合、これは機能しないことに注意してください。SDカードがマウントされていないときにイベントが送信されると、レシーバーにアクセスできなくなり、イベントを見逃してしまいます。
たぶんあなたはバックグラウンドで実行されるサービスで受信機を登録することができます