Не получает трансляцию от намеренного отправителя в Android 10, когда выбран «Копировать» - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь получить обратные вызовы в BroadcastReceiver от IntentSender, когда пользователь завершает действие общего ресурса (копирует ли URL-адрес в буфер обмена или выбирает какое-либо приложение)

Я следовал android документации здесь о том, как определить, когда пользователи заполняют общий доступ в Android Sharesheet. Он работает нормально для всех Android ниже Android 10, но не для Android 10. В Android 10 мой широковещательный приемник не вызывается, когда в селекторе выбран «copy» (но он все еще работает хорошо, если пользователь выбирает другие приложения).

Кто-нибудь знает почему или сталкивается с такой же проблемой? Я не уверен, что проблема указана c для некоторых устройств. Я проверил это с Pixel2 и Huawei P30 (оба с Android 10).

Я создал свой BroadcastReceiver следующим образом:

class MyBroadCastReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        //receiving broadcast here
    }
}

Я также объявил свой вещательный приемник в файл манифеста:

<receiver
    android:name=".MyBroadCastReceiver"
    android:exported="false" />

Вот код, вызывающий диалог CreateChooser:

val shareIntent = Intent(Intent.ACTION_SEND)
shareIntent.type = "text/plain"
shareIntent.putExtra(Intent.EXTRA_TEXT, shareUrl)

val receiver = Intent(this, MyBroadCastReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT)
val intent = Intent.createChooser(shareIntent, "Share url", pendingIntent.intentSender)
startActivity(intent)

Снимок экрана: https://i.ibb.co/477JMPb/Screen-Shot-2563-04-12-at-09-01-10.png

Спасибо.

1 Ответ

0 голосов
/ 13 апреля 2020

«Копировать», вероятно, не приложение, а скорее часть самого общего ресурса, копирующего элемент в буфер обмена. Я не очень удивлен, что они не вызывают ваш IntentSender для этого сценария, потому что нет компонента для отчета, который выбрал пользователь. Это похоже на то, если пользователь закрывает общий лист с помощью кнопки НАЗАД. Как документация гласит: «Приложения не должны быть написаны при условии, что этот обратный вызов всегда будет происходить».

...