Я пытаюсь отслеживать уведомления, которые были отменены. Я настроил Room, и Dagger внедряет мой FirebaseService с репозиторием. Я установил deletePendingIntent
в своем уведомлении и с помощью метода BroadcastRevceiver onReceive. Я могу удалить элемент из репозитория. Он отлично работает на API 28 Oreo, но на API 24 Nougat Android 7.0 и на устройстве, и на эмуляторе он не работает. Код никогда не достигает onReceive
метода при отладке.
Некоторые предполагают, что он может иметь разрешения, но на моем телефоне я предоставил все, что мог. Что может вызвать эту проблему?
public class FirebaseService extends FirebaseMessagingService
{
private NotificationManager mNotificationManager;
NotificationCompat.Builder builder;
static Context ctx;
@Override
public void onCreate() {
// [...] Dagger stuff
super.onCreate();
registerReceiver(receiver, new IntentFilter(NOTIFICATION_DELETED_ACTION));
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
/// [...]
sendNotification(body,title,group,id);
}
private static final String NOTIFICATION_DELETED_ACTION = "NOTIFICATION_DELETED";
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Integer ntfId = intent.getIntExtra("ID", -1);
/// [...] Some actions
}
};
private void sendNotification(String msg, String title, String group, int id) {
String GROUP_KEY_WORK_EMAIL = "SOME_STRING";
Intent intent = new Intent(ctx, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Delete intent
Intent deleteIntent = new Intent(NOTIFICATION_DELETED_ACTION);
deleteIntent.putExtra("ID", id);
mNotificationManager = (NotificationManager)
ctx.getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0,
intent, PendingIntent.FLAG_ONE_SHOT);
PendingIntent deletePendingIntent = PendingIntent.getBroadcast(ctx, id, deleteIntent, 0);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(
ctx,
NOTIFICATION_CHANNEL_ID)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(title)
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(msg))
.setContentText(msg)
.setSound(defaultSoundUri)
.setGroup(group)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL);
notificationBuilder.setContentIntent(contentIntent);
notificationBuilder.setDeleteIntent(deletePendingIntent);
mNotificationManager.notify(id, notificationBuilder.build());
}
@Override
public void onDestroy()
{
unregisterReceiver(receiver);
super.onDestroy();
}
}
Манифест:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<application
[...]
<activity android:name=".activity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
[...]
<service
android:name=".service.FirebaseService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>