отменить услугу намерения от широковещательного приемника - PullRequest
0 голосов
/ 25 сентября 2019

Я отправляю локальное уведомление с кнопкой отмены, и когда я нажимаю на нее, я хочу отменить службу намерений, но событие не вызывается.

Я могу отменить службу намерений, используя действие, но когда из уведомления, это не работает.

Мой BroadcastReceiver (отображается журнал).

class EventsReceiver: BroadcastReceiver(){
    var onEvent = {}
    override fun onReceive(context: Context?, intent: Intent?) {
        Log.i("EventsReceiver", "onReceive")
        when(intent?.action){
            Constants.ACTION_EVENT_CANCEL -> {
                Log.i("EventsReceiver", "cancel")
                onEvent()
            }
        }
    }
}

OnReceive вызывается, когда я нажимаю кнопку уведомления, но когда я вызываю onEvent (), функция cancelTrip ()не вызывается.

My Intent Service:

override fun onCreate() {
        super.onCreate()
        notificationHelper = NotificationHelper(this)
        receiver = EventsReceiver ()
        receiver.onEvent = {
            cancelTrip()
        }
        LocalBroadcastManager.getInstance(this).registerReceiver(receiver, IntentFilter(Constants.ACTION_EVENT_CANCEL))
    }

Функция действия, которая отменяет службу намерений:

private fun cancel(){
        val intent = Intent()
        intent.setAction(Constants.ACTION_EVENT_CANCEL)
        LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
    }

Как создать локальное уведомление:

val notif = NotificationCompat.Builder(ctx,NOTIFICATION_CHANNEL_ID)
        notif.setContentTitle("My App")
        notif.setContentText("Canceled trip")
        notif.setSmallIcon(R.drawable.ic_launcher_foreground)
        val notifIntent = Intent(ctx, MenuActivity::class.java)
        val pendingIntent = PendingIntent.getActivity(ctx,0,notifIntent,0)
        notif.setContentIntent(pendingIntent)
        val cancelIntent = Intent(ctx, EventsReceiver::class.java)
        val cancelPendingIntent = PendingIntent.getBroadcast(ctx,0,cancelIntent,PendingIntent.FLAG_CANCEL_CURRENT)
        notif.addAction(R.mipmap.ic_launcher, ctx.getString(R.string.cancel_trip), cancelPendingIntent)
        service.notify(NOTIFICATION_CANCEL_ID, notif.build()) 

1 Ответ

0 голосов
/ 25 сентября 2019
val cancelIntent = Intent(ctx, EventsReceiver::class.java)

Это потому, что вы не указали действие (при создании уведомления), поэтому здесь when(intent?.action) у вас другое действие, чем Constants.ACTION_EVENT_CANCEL.

, попробуйте использовать это:

val cancelIntent = Intent(Constants.ACTION_EVENT_CANCEL)

или

val cancelIntent = Intent(ctx, EventsReceiver::class.java)
cancelIntent.action = Constants.ACTION_EVENT_CANCEL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...