Прежде чем мы рассмотрим возможность оплаты программиста, я хочу исправить эта проблема у меня самого. «Мне тоже было бы полезно это исправить», — сказал мой шеф-повар =) С момента выпуска Android 14 наше автоматическое предоставление разрешения после включения специальных возможностей приложения больше не работает. Нас около 130 человек, и более половины из них теперь имеют Android 14.
При включении специальных возможностей для приложения появляются диалоговые окна разрешений, в которых должны автоматически предоставляться три разрешения. Разрешения: Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS.
Мы записываем в нашу базу данных всегда новые контакты на телефоны и нам нужно их читать в особых случаях, главное просто чтобы записать контакты на телефонах.
Для автоматического предоставления разрешений я буду использовать идентификатор ресурса кнопки.
Поскольку это больше не работает на Android 14, я попытался использовать текст кнопок, которые следует нажимать, когда найден текст типа «Грант». На двух языках я написал текст кнопок, но это тоже не работает.
Я не понимаю, почему это больше не работает на A14, поскольку идентификатор ресурса диалога разрешений Кнопка «Предоставить» такая же и не изменилась по сравнению с A13.
Я просмотрел идентификаторы ресурсов с помощью инструмента uiautomatorview, который присутствует в Android SDK.
Я вижу, что он «пытается» нажмите на кнопку, когда появляется диалоговое окно разрешений, но этого не происходит.
Вот несколько фрагментов кода для этого: он написан на Kotlin.
для одного файла у меня установлены разрешения:
Код: Выделить всё
val PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.READ_CONTACTS,
Manifest.permission.WRITE_CONTACTS,
Код: Выделить всё
private fun AccessibilityServiceQ.click(it: AccessibilityNodeInfo, clickOnlyIfVisible: Boolean = false): Boolean {
runCatching {
if (clickOnlyIfVisible && it.isVisibleToUser) {
Log.v(TAG, "ACC::onAccessibilityEvent: click - $it")
return it.performAction(AccessibilityNodeInfo.ACTION_CLICK)
} else if (!clickOnlyIfVisible) {
Log.v(TAG, "ACC::onAccessibilityEvent: click - $it")
return it.performAction(AccessibilityNodeInfo.ACTION_CLICK)
}
}
}
Код: Выделить всё
private fun permissionClick(packageName: String, currentActivity: String, listWithNameOfApp: Set): Boolean {
val buttonIds = listOf(
"com.android.permissioncontroller:id/permission_allow_foreground_only_button",
"com.android.permissioncontroller:id/permission_allow_button")
findAccessibilityNodeInfosByText здесь только потому, что я тоже попробовал, как я сказал, использовать текст кнопки, вы можете игнорировать это
Код: Выделить всё
fun clickOnButton(selector: String, findByText: Boolean): Boolean {
val nodes = if (findByText) {
eventRootInActiveWindow?.findAccessibilityNodeInfosByText(selector)
} else {
eventRootInActiveWindow?.findAccessibilityNodeInfosByViewId(selector)
}
return nodes?.firstOrNull { it.isClickable }?.let { node ->
click(node).also { node.recycle() }
} ?: false
Кто-нибудь может мне помочь, пожалуйста? Мы хотим сделать приложение легко устанавливаемым и доступным, чтобы не возникало проблем и вопросов, мы знаем все, что многие люди не знают, что они делают.
Надеемся на любую помощь, если она поможет. даже возможно, конечно
с уважением
Подробнее здесь: https://stackoverflow.com/questions/782 ... android-14
Мобильная версия