qq_57702377 2024-02-12 14:30 采纳率: 0%
浏览 71

autojs在安卓10以上如何后台监听剪贴板?或者检测到复制这个动作?

autojs,需要一个在后台监听剪贴板或者检测到复制动作的方法。通过隐藏悬浮窗获取焦点的方法试过了,但主要问题的会影响手机触控,并且影响前台输入法使用。

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-12 14:31
    关注

    引自免费微信小程序:皆我百晓生

    在Android 10及以上版本中,由于隐私限制和权限管理的加强,Auto.js无法直接后台监听剪贴板变化或检测复制动作。不过,有一种变通的方法可以尝试实现类似的功能:

    方法一:利用无障碍服务(AccessibilityService) 借助无障碍服务,我们可以创建一个自定义的服务来监听全局事件,包括文本选择、复制等操作。以下是一个简化的示例代码:

    // 自定义AccessibilityService类
    class ClipboardListenerService extends AccessibilityService {
        @Override
        public void onAccessibilityEvent(AccessibilityEvent event) {
            if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED ||
                    event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
                // 获取当前选中的文本
                CharSequence selectedText = event.getText();
                if (selectedText != null && !selectedText.toString().isEmpty()) {
                    Log.d("ClipboardListener", "Detected text selection: " + selectedText);
                    // 在这里处理你的逻辑,例如将文本保存到数据库或发送通知
                }
            }
        }
    
        @Override
        public void onServiceConnected() {
            AccessibilityServiceInfo info = new AccessibilityServiceInfo();
            info.eventTypes = AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED | AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
            info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
            info.flags = AccessibilityServiceInfo.DEFAULT;
            setServiceInfo(info);
        }
    }
    
    // 在AndroidManifest.xml中声明并配置无障碍服务
    <service android:name=".ClipboardListenerService">
        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService" />
        </intent-filter>
        <meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibility_service_config" />
    </service>
    
    // 在res/xml/目录下创建accessibility_service_config.xml文件,并设置相应权限
    <?xml version="1.0" encoding="utf-8"?>
    <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
        android:description="@string/accessibility_description"
        android:packageNames="允许监听的应用包名"
        android:canRetrieveWindowContent="true"
        android:accessibilityEventTypes="typeViewTextSelectionChanged|typeWindowStateChanged"
        android:accessibilityFeedbackType="feedbackGeneric"
        android:notificationTimeout="100" />
    

    请确保用户已授权您的应用使用无障碍服务。这种方法虽然不是严格意义上的“监听剪贴板”,但可以间接获取到用户的复制行为。

    注意:由于无障碍服务的强大功能,Google Play 对其有严格的审查要求,请务必遵守相关规则并在合法合理的场景下使用此功能。

    由于实际环境和需求复杂性,以上代码仅为简化示例,可能需要根据具体情况进行调整和完善。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月12日

悬赏问题

  • ¥20 ARKts悬浮窗和快捷方式问题
  • ¥15 comparecluster没有办法kegg
  • ¥15 远程访问linux主机超时
  • ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例
  • ¥15 CPU卡指令整合指令数据都在图片上
  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分
  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES