Android OS 13 - 使用辅助功能服务授予 MediaProjection 权限

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

我正在开发一个私人应用程序,即它不会在 Google Play 商店上发布。

我使用的是 Android OS 13 设备。我的应用程序有屏幕投射功能。要使用此功能,应用程序需要媒体投影权限。每当启动屏幕投射时,设备都会提示权限,并且设备用户需要授予它才能开始投射。一旦获得许可,屏幕投射就可以正常工作。

我的应用程序确实具有 Accessibilty 权限。

那么是否可以使用辅助功能自动授予媒体投影权限?如果是,那么如果您提供一些有关如何实现这一目标的见解将会很有帮助。

我尝试监听辅助功能事件并尝试在显示权限对话框时获取屏幕上显示的视图的详细信息。我得到的类名称为 AlertDialog 以及 AlertDialog 上显示的文本列表。 但我无法弄清楚如何获取 AlertDialog 特定按钮的视图。如果我获得视图详细信息,那么我可以在该按钮视图上执行单击事件注入。

谢谢你, 新

android accessibilityservice android-mediaprojection
1个回答
0
投票

很难协助与权限对话框进行自动交互。不过,我可以指导您如何继续进行辅助功能事件处理。

您可以继续使用以下代码:

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
            if (event.getClassName() != null && event.getClassName().equals("android.app.AlertDialog")) {
                // Extract dialog text
                CharSequence dialogText = event.getText().toString();

                // Check if dialog text contains permission request message
                if (dialogText.contains("Media Projection permission")) {
                    // Find button component
                    AccessibilityNodeInfo nodeInfo = event.getSource();
                    if (nodeInfo != null) {
                        // Use AccessibilityNodeInfo to traverse view hierarchy
                        findAndClickButton(nodeInfo);
                    }
                }
            }
        }
    }

    private void findAndClickButton(AccessibilityNodeInfo nodeInfo) {
        // Be sure to check for null and properly recycle AccessibilityNodeInfo objects

        if (nodeInfo.isClickable()) {
            nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
        }

        // Recursively traverse child nodes
        for (int i = 0; i < nodeInfo.getChildCount(); i++) {
            AccessibilityNodeInfo childNode = nodeInfo.getChild(i);
            if (childNode != null) {
                findAndClickButton(childNode);
            }
        }
    }

在 findAndClickButton 方法中,您需要实现逻辑来遍历对话框的视图层次结构以查找按钮组件,然后您可以使用 ACTION_CLICK 对其执行单击操作

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