Есть ли возможность вставить содержимое буфера обмена в виджет главного экрана для android 10?

Я пытаюсь создать виджет, который вводит серийный ключ от пользователей. Я также добавил кнопку вставки для удобства, потому что серийный ключ состоит из 14 цифр. Код ниже работал нормально для устройств до Android 10

ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
String serial = item.getText();

Затем я сравниваю серийный номер с нашим серийным регулярным выражением. Проблема в том, что текущий фрагмент кода возвращает нулевое значение для Android 10.

Следующее ограничение я нашел в официальной документации.

Ограниченный доступ к данным буфера обмена.

Если ваше приложение не является редактором метода ввода по умолчанию (IME) или приложением, которое в настоящее время имеет фокус, ваше приложение не может получить доступ к данным буфера обмена на Android 10 или выше.

Есть ли способ включить фокус при нажатии кнопки на виджете? Заранее спасибо.

1 ответ

Ваше окно должно быть сфокусировано при доступе к буферу обмена:

override fun onWindowFocusChanged(hasFocus: Boolean) {
    super.onWindowFocusChanged(hasFocus)
    if(hasFocus){
        val clipboard =
            getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
        val item: ClipData.Item = clipboard.primaryClip.getItemAt(0)
        val serial: String = item.text.toString()
    }
}

Это должно работать внутри вашей деятельности.

Другие вопросы по тегам