BroadcastReceiver.onReceive не вызывается, но Activity.onNewIntent делает. Зачем? - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь получить обратный вызов «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);

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Проблема решена с помощью ответа из этой темы Нажатие на значок уведомления Android не запускает широковещательный приемник

Явное намерение заменено неявным.Намерение cancelIntent = новое Намерение ("messages_canceled");

0 голосов
/ 22 марта 2019

Это потому, что когда вы начинаете свою деятельность, вызывается onStart (), и вы получаете обратный вызов в onReceive (), как только действие запускается. Но когда вы щелкнете по вашему уведомлению, onStart не будет вызываться, поскольку действие уже создано. В этом случае onStart вызываться не будет. Попробуйте зарегистрироваться в onResume (), я почти уверен, что это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...