アクティビティの新しい更新がデバイスにインストールされたことを確認するサービスをセットアップしようとしています。私はすでにアプリケーションアクティビティ内でこれを行っておりBroadcastreceiver
、マニフェストで を宣言しており、完全に機能しています。
ただし、そのレシーバーを Service 内で実行して動的に宣言しようとすると、onReceive
決して呼び出されません。これは私のサービスコードです:
public class UpdateService extends Service {
private static String mPackage = "com.my.package";
private static String mActivityName = "myActivity";
private BroadcastReceiver mUpdateReceiver;
@Override
public void onCreate() {
super.onCreate();
mUpdateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("mTag","In the BroadcastReceiver onReceive()");
if (intent.getAction().equalsIgnoreCase(Intent.ACTION_PACKAGE_REPLACED)) {
// Log that a new update is has been found
Log.d("mTag","New version of the app has been installed.");
Log.d("mTag", "Intent data: " + intent.getDataString());
Log.d("mTag","My package: " + mPackage);
}
}
};
Log.d("mTag","In the service onCreate() method.");
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
registerReceiver(mUpdateReceiver,filter);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("mTag","UpdateService started");
return Service.START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mUpdateReceiver);
Log.d("mTag","Service destroyed");
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
サービスのログイン onCreate() が呼び出され、サービスが稼働中であることがわかります。ただし、adb を介していくつかのアプリをインストールして置き換えた後BroadcastReceiver
、メソッドのログはonReceive()
呼び出されません。
これは私の MainActivity です:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService(new Intent(this, UpdateService.class));
}
}
onReceive()
が呼び出されない理由はありますか?
ありがとうございました。
私はこれらの 2 つの参照に基づいてコードを作成しました。