首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从broadcast broadcast broadcast取消意图服务

从broadcast broadcast broadcast取消意图服务
EN

Stack Overflow用户
提问于 2019-09-26 01:52:53
回答 1查看 137关注 0票数 0

我正在发送一个带有取消按钮的本地通知,当我单击它时,我想取消我的意图服务,但是事件没有被调用。

我可以使用活动取消意图服务,但当从通知中取消时,它不起作用。

我的BroadcastReceiver (日志正在显示)。

代码语言:javascript
复制
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()函数。

我的意图服务:

代码语言:javascript
复制
override fun onCreate() {
        super.onCreate()
        notificationHelper = NotificationHelper(this)
        receiver = EventsReceiver ()
        receiver.onEvent = {
            cancelTrip()
        }
        LocalBroadcastManager.getInstance(this).registerReceiver(receiver, IntentFilter(Constants.ACTION_EVENT_CANCEL))
    }

取消意图服务的活动函数:

代码语言:javascript
复制
private fun cancel(){
        val intent = Intent()
        intent.setAction(Constants.ACTION_EVENT_CANCEL)
        LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
    }

如何创建本地通知:

代码语言:javascript
复制
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()) 
EN

回答 1

Stack Overflow用户

发布于 2019-09-26 04:23:27

代码语言:javascript
复制
val cancelIntent = Intent(ctx, EventsReceiver::class.java)

这是因为您没有指定操作(在创建通知时),所以在这里的when(intent?.action)中,您有不同于Constants.ACTION_EVENT_CANCEL的操作。

尝试使用以下命令:

代码语言:javascript
复制
val cancelIntent = Intent(Constants.ACTION_EVENT_CANCEL)

代码语言:javascript
复制
val cancelIntent = Intent(ctx, EventsReceiver::class.java)
cancelIntent.action = Constants.ACTION_EVENT_CANCEL
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58104042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档