BroadcastReciever не получает данные с кнопки уведомления
Я пытаюсь сделать уведомление с помощью кнопки удаления, уведомления хранятся в БД SQLite, и после нажатия я хочу удалить "запись" по идентификатору. Сначала я получаю уведомление, сохраняю его в БД, сохраняю уникальный идентификатор и передаю его методу, который создает уведомление. Это хорошо в методе.
public static String CUSTOM_ACTION = "com.example.app.Services.REMOVE";
Intent snoozeIntent = new Intent(this, MyBroadcastReceiver.class);
snoozeIntent.setAction(CUSTOM_ACTION);
snoozeIntent.putExtra("NOT_WORKING", String.valueOf(id));
PendingIntent snoozePendingIntent =
PendingIntent.getBroadcast(this, 0, snoozeIntent, 0);
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_ONE_SHOT);
String channelId = getString(R.string.default_notification_channel_id);
NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(this, channelId)
.setDefaults(Notification.DEFAULT_ALL)
.setSmallIcon(R.drawable.ic_stat_bell)
.setContentTitle("Loggly")
.setContentText(messageBody)
.setAutoCancel(true)
.setContentIntent(pendingIntent)
.addAction(R.drawable.ic_delete_forever_black_24dp, "Remove", snoozePendingIntent);
тогда у меня есть приемник вещания для обработки данных из уведомления. Вот как это выглядит в моем файле манифеста.
<receiver android:name=".MyBroadcastReceiver" android:exported="false">
<intent-filter>
<action android:name="com.example.app.Services.REMOVE"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
А вот для приемника вещания значение, которое я получил от статистов, всегда равно нулю... Я пытался найти решение, но безрезультатно.
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
String id;
if (extras != null) {
id = extras.getString("NOT_WORKING");
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager notificationManager = (NotificationManager) context.getSystemService(ns);
if (notificationManager != null) {
notificationManager.cancel(0);
}
Intent inten = new Intent(context, RemoveService.class);
inten.putExtra("NOT_WORKING", id);
context.startService(inten);
}
}
}
Наконец, я запускаю службу намерений, которая должна удалить "запись" из базы данных, но когда широковещательный получатель не получает идентификатор, он ничего не может сделать. Спасибо за каждое предложение.
1 ответ
Я только что создал образец уведомления на своей стороне, и проблема в том, как вы создаете pendingIntent. Просто добавьте соответствующий флаг в параметр pendingIntent, и он будет работать нормально.
PendingIntent snoozePendingIntent = PendingIntent.getBroadcast(this, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Ты можешь использовать FLAG_ONE_SHOT
также. Если это удовлетворяет вашему варианту использования. Вы можете пройти через различные флаги, которые могут быть использованы в PendingIntent