Android 14 (Apilevel 34) не может найти кнопку «Обновление» в диалоговом окне PackageInstallerAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Android 14 (Apilevel 34) не может найти кнопку «Обновление» в диалоговом окне PackageInstaller

Сообщение Anonymous »

Я обновляю свое приложение для Android для поддержки Android 14. Приложение можно обновить с помощью CMS (система управления контентом). Когда приложение не является владельцем устройства, пользователи могут включить опцию автоматического обновления. Включение этой опции требует, чтобы пользователь активировал службу доступности, предоставленную моим приложением. Эта служба предназначена для автоматического приема обновлений приложений путем обнаружения диалогового окна PackageInstaller, поиска кнопки «OK» (или «Обновление»), и программно нажав ее. /> Выполнение действия нажатия на кнопке с использованием vicalbibilityndeinfo.performaction (доступность nodeinfo.action_click). < /p>
Однако на Android 14 кнопка «OK» или «Обновление» больше не обнаруживается в иерархии узла доступности. Я зарегистрировал иерархию диалога, и кажется, что кнопка либо скрыта, либо не включена в Дерево доступности. Вот зарегистрированная иерархия: < /p>
null - android.widget.FrameLayout - null - null
com.android.packageinstaller:id/alertTitle - android.widget.TextView - iGotcha Signage Player - null
com.android.packageinstaller:id/install_confirm_question_update - android.widget.TextView - Do you want to update this app? - null
com.android.packageinstaller:id/buttonPanel - android.widget.ScrollView - null - null
com.android.packageinstaller:id/button2 - android.widget.Button - Cancel - null
< /code>
Как вы можете видеть, кнопка «ОК» или «Обновление» отсутствует, в то время как кнопка «Отмена» (кнопка2) присутствует. Это ошибка, или есть новые ограничения в Android 14, которые не позволяют службам доступности взаимодействовать с системными диалогами? Есть ли обходные пути для программного приема обновлений приложений в этом сценарии? < /P>
private fun appUpdateDialogOkButton(e: AccessibilityEvent): AccessibilityNodeInfo? =
e.source!!.findAccessibilityNodeInfosByViewId("android:id/button1").firstOrNull()
?: e.source!!.findAccessibilityNodeInfosByViewId("com.android.packageinstaller:id/ok_button").firstOrNull()
?: e.source!!.findAccessibilityNodeInfosByViewId("com.android.packageinstaller:id/button1").firstOrNull()

private fun logNodeHierarchy(node: AccessibilityNodeInfo, indent: String) {
AppLog.debug("$indent${node.viewIdResourceName} - ${node.className} - ${node.text} - ${node.contentDescription}")
for (i in 0 until node.childCount) {
node.getChild(i)?.let { logNodeHierarchy(it, "$indent ") }
}
}

override fun onAccessibilityEvent(e: AccessibilityEvent) {
if (acceptAppUpdateEnabled && isAppUpdateDialog(e)) {
AppLog.info("isAppUpdateDialog? ${isAppUpdateDialog(e)}")
val okButton = appUpdateDialogOkButton(e)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
val rootNode = e.source
rootNode?.let { logNodeHierarchy(it, "") }
}
if (okButton != null) {
okButton.performAction(AccessibilityNodeInfo.ACTION_CLICK)
onAppUpdateAccepted()
}
}}
private fun isAppUpdateDialog(e: AccessibilityEvent): Boolean =
e.eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED && (
e.packageName == "com.google.android.packageinstaller" ||
e.packageName == "com.android.packageinstaller"
) &&
e.source != null && (
e.source!!.findAccessibilityNodeInfosByViewId("com.android.packageinstaller:id/install_confirm_question_update")
.isNotEmpty() ||
e.source!!.findAccessibilityNodeInfosByViewId("com.android.packageinstaller:id/install_confirm_question")
.isNotEmpty()
)


Подробнее здесь: https://stackoverflow.com/questions/795 ... ler-dialog
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Android PackageInstaller install_failed_internal_error: сеанс.
    Anonymous » » в форуме Android
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Режим киоска API Api Android Management: отображение приглашения подтверждения PackageInstaller для APK с нагрузкой (не
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Установить APK с PackageInstaller сбое на устройстве Android API 35
    Anonymous » » в форуме Android
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • CancelListener в диалоговом окне не работает Java Android? Как это использовать?
    Гость » » в форуме Android
    0 Ответы
    70 Просмотры
    Последнее сообщение Гость
  • Как настроить выбор даты в диалоговом окне Android?
    Гость » » в форуме Android
    0 Ответы
    35 Просмотры
    Последнее сообщение Гость

Вернуться в «Android»