Anndroid: Как отправить широковещательное намерение в сервис из действия уведомления? - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь отправить сообщение о намерениях из-за действия уведомления на 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)

1 Ответ

1 голос
/ 13 июня 2019

возможно ли отправить намерение трансляции из getCustomAction (), получить его в сервисе и что-то с ним сделать?

Служба может зарегистрировать системный приемник (registerReceiver() на Context), а затем отправить системную трансляцию на него (sendBroadcast() на Context), используя PendingIntent.getBroadcast() длясоздайте PendingIntent.

Или зафиксируйте службу по адресу "таким образом, определенное состояние моей службы испорчено".

Было бы возможно что-то подобное в getCustomAction ()?

Нет, потому что отправитель - это другой процесс, а не ваш.LocalBroadcastManager работает только в вашем собственном процессе.

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