自 Android 14 起,授予自动权限不再起作用

问题描述 投票:0回答:1

我负责我们公司 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 上也不起作用?

有人可以帮我吗?我们希望使该应用程序易于安装和访问,这样就不会出现问题或疑问,我们都知道,很多人不知道他们在做什么。

当然希望得到任何帮助,如果可能的话

问候

android kotlin permissions android-14
1个回答
0
投票

我也有同样的问题。这个问题你解决了吗?

© www.soinside.com 2019 - 2024. All rights reserved.