我负责我们公司 Android 应用程序的小问题,因为我不是一个很好的编码员,我是一名系统管理员,但我像一个全能者。 在我们考虑花钱聘请编码员之前,我想自己解决这个问题。我的厨师说,解决这个问题也会让我受益匪浅 =) 自 Android 14 发布以来,我们在启用应用程序的可访问性后的自动授予权限不再起作用。我们大约有 130 人,其中超过一半现在拥有 Android 14。
启用应用程序的辅助功能时,会出现权限对话框,并且应自动授予三个权限。权限为 Manifest.permission.ACCESS_COARSE_LOCATION、Manifest.permission.READ_CONTACTS、Manifest.permission.WRITE_CONTACTS。 我们总是用数据库将新联系人写入手机,在特殊情况下我们需要读取它们,主要的就是在手机上写入联系人。
对于自动授予权限,我将使用按钮的资源 ID。 因为它不再适用于 Android 14,所以我尝试使用按钮的文本,当找到“Grant”等文本时应单击该文本。我用两种语言编写了按钮的文本,但这也不起作用。
我不明白为什么它在 A14 上不再起作用,因为权限对话框“授予”按钮的资源 ID 是相同的,并且与 A13 相比没有更改。 我使用 Android SDK 中的 uiautomatorview 工具查看了资源 ID。 我可以看到,当权限对话框出现时,它“尝试”单击按钮,但没有发生。
以下是一些代码片段:它是用 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)
}
}
}
这是找到后应单击的按钮的资源 ID 代码:
private fun permissionClick(packageName: String, currentActivity: String, listWithNameOfApp: Set<AccessibilityNodeInfo>): 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
我就是这么想的。为什么即使资源 id 相同,它在 Android 14 上也不起作用?
有人可以帮我吗?我们希望使该应用程序易于安装和访问,这样就不会出现问题或疑问,我们都知道,很多人不知道他们在做什么。
当然希望得到任何帮助,如果可能的话
问候
我也有同样的问题。这个问题你解决了吗?