Уведомление удалить намерение работает на Oreo, а не на эмуляторе Nougat, почему? - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь отслеживать уведомления, которые были отменены. Я настроил 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>
...