Я пытаюсь получить обратный вызов «DeleteIntent» из моего уведомления.
BroadcastReceiver.onReceive не вызывается из PendengIntent, хотя он работает нормально, когда широковещание запускается вручную с помощью sendBroadcast (deleteIntent) .
Хорошо работает, когда целью намерения является Активность (хиты Activity.onNewIntent ), но использовать его странно, поскольку активность выходит на передний план при отклонении сообщения.
Помогите, пожалуйста, onReceive позвонить на BroadcastReceiver .
Он видим, экспортирован и включен, находится в одном пакете.
MyCancelReceiver class
public class MyCancelReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
Манифест Android
<activity android:name=".MainActivity" android:launchMode="singleTask">
<MyCancelReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="notification_cancelled"/>
</intent-filter>
</receiver>
MainActivity
private MyCancelReceiver mReceiver;
@Override
public void onStart() {
super.onStart();
IntentFilter filter = new IntentFilter();
filter.addAction("notification_cancelled");
mReceiver = new MyCancelReceiver();
registerReceiver(mReceiver, filter);
}
@Override
public void onStop() {
super.onStop();
unregisterReceiver(mReceiver);
}
Создание уведомления:
Intent cancelIntent = new Intent(getApplicationContext(), MyCancelReceiver.class);
cancelIntent.setAction("notification_cancelled");
cancelIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent deleteIntent = PendingIntent.getActivity(getApplicationContext(), 0, cancelIntent, PendingIntent.FLAG_CANCEL_CURRENT);
Notification not = new Notification.Builder(getApplicationContext(), Util.ANDROID_CHANNEL_ID)
.setContentTitle(messageTitle)
.setContentText(messageBody)
.setSmallIcon(R.drawable.default)
.setAutoCancel(true)
.setDeleteIntent(deleteIntent)
.setContentIntent(contentIntent)
.build();
NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, not);
Заранее спасибо.