我正在尝试从Android上的通知操作中发送广播意图,但在这里有点丢失。
我有一个android服务,可以接收来自活动/碎片的广播意图并做出相应的反应,效果很好,但我不知道要从通知操作中发送一个。
服务看起来像这样。
class MyService : Service() {
override fun onCreate() {
super.onCreate()
LocalBroadcastManager.getInstance(this).registerReceiver(mIntentActionBroadcastReceiver, IntentFilter(SERVICE_BROADCAST_INTENT))
val broadcastIntentFilter = IntentFilter()
broadcastIntentFilter.addAction(SERVICE_BROADCAST_KEY)
registerReceiver(mIntentActionBroadcastReceiver, broadcastIntentFilter)
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
// onStart
}
private val mIntentActionBroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
// do something
}
}
}
现在我有了通知通道,用户可以在其中执行某些操作,看起来像这样。
val notificationBuilder = NotificationCompat.Builder(context, PRIMARY_CHANNEL)
.addAction(getCustomAction(context))
private fun getCustomAction(context: Context): NotificationCompat.Action {
val actionIntent = Intent(context, MyService::class.java).apply {
action = NOTIFICATION_ACTION_CUSTOM
}
val pendingIntent = PendingIntent.getService(context, 0, actionIntent, 0)
return NotificationCompat.Action(R.drawable.ic_custom_48dp, "", pendingIntent)
}
当用户单击通知中的操作时,似乎再次调用MyService onStartCommand,因此我的服务的某些状态混乱了。
相反,是否可以从getCustomAction()
发送广播意图并将其接收到服务中并对其进行处理?
在getCustomAction()
中是否可能发生这种情况?
val intent = Intent(SERVICE_BROADCAST_INTENT)
intent.putExtra(SERVICE_BROADCAST_KEY, NOTIFICATION_ACTION_CUSTOM)
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
答案 0 :(得分:1)
是否可以从getCustomAction()发送广播意图并在服务中接收它并对其进行处理?
您可以让服务注册系统广播接收器(registerReceiver()
上的{Context
),然后使用{{向其发送系统广播(sendBroadcast()
上的Context
)) 1}}来创建PendingIntent.getBroadcast()
。
或者,修复该服务以解决“因此我的服务的某些状态混乱”的问题。
在getCustomAction()中可能会发生这种情况吗?
否,因为发件人是另一个进程,而不是您的进程。 PendingIntent
仅在您自己的过程中起作用。