Я использую FCM, в onMessageReceived()
Я использую PendingIntent.getBroadcast()
для вызова BroadcastReceiver
, присутствующего в той же услуге. В приведенном ниже коде я отправляю трансляцию, если уведомление удалено из области уведомлений.
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
......
Intent intent = new Intent(getApplicationContext(), MyBroadcastReceiver.class);
intent.putExtra("id", NOTIFICATION_ID);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setDeleteIntent(pendingIntent);
......
}
Более того, в методе onCreate()
я регистрирую BroadcastReceiver
, поскольку я отправляю трансляции из некоторых других видов деятельности.
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate: ");
// registering the broadcast receiver on action "broadcastReceiverAction"
IntentFilter intentFilter = new IntentFilter("broadcastReceiverAction");
LocalBroadcastManager.getInstance(this).registerReceiver(new MyBroadcastReceiver(), intentFilter);
}
Я заметил, что при удалении статического приемника из манифеста 1015 *, BrodcastReceiver
не вызывается при удалении уведомлений, несмотря на регистрацию приемника вещания в методе onCreate()
, Почему это происходит? Значит ли это, что PendingIntent.getBroadcast()
нужен статический приемник?
MyBroadcastReceiver
public static class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPreferences = context.getSharedPreferences("shared", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.remove(String.valueOf(intent.getExtras().getInt("id")));
editor.commit();
}
}
РЕДАКТИРОВАТЬ 1
статический приемник вещания
<receiver android:name=".MyFirebaseMessagingService$MyBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="broadcastReceiverAction" />
</intent-filter>
</receiver>
отмена регистрации приемника вещания в onDestroy()
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
// un-registering receiver
LocalBroadcastManager.getInstance(this).unregisterReceiver(new MyBroadcastReceiver());
}