【问题标题】:Samsung devices and Accessibility Services (ACTION_PASTE, Clipboard)三星设备和辅助功能服务(ACTION_PASTE、剪贴板)
【发布时间】:2015-02-18 15:44:11
【问题描述】:

我尝试在第三方应用程序中实现自动登录功能。

我尝试在登录页面中复制并粘贴用户名/密码。为此,我使用 Android 无障碍服务。

我可以在不同的设备上粘贴文本。但在三星设备上,用户名/密码粘贴在错误的输入文件中。

日志显示用户名/密码正在按预期复制。但是在粘贴时会粘贴错误的文本。

这就是我的工作:

private ClipboardManager mClipboardManager;
mClipboardManager = (ClipboardManager) getApplication().getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);

ClipData clip = ClipData.newPlainText("", textToPaste);
mClipboardManager.setPrimaryClip(clip);
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_PASTE);
clip = ClipData.newPlainText("", "");
mClipboardManager.setPrimaryClip(clip);

clip = ClipData.newPlainText("", textToPaste2);
mClipboardManager.setPrimaryClip(clip);
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_PASTE);
clip = ClipData.newPlainText("", "");
mClipboardManager.setPrimaryClip(clip);

您能帮我找到解决方案吗?如何粘贴正确的文本?

【问题讨论】:

    标签: android clipboard samsung-mobile accessibilityservice clipboardmanager


    【解决方案1】:

    我也遇到了这个问题,我注意到这也是一个悬而未决的问题here,并且没有得到适当的解决。这个问题似乎是三星自己的剪贴板的竞争条件,以及他们如何实现辅助功能来使用它。我有一个实用但不那么漂亮的解决方案:

    if (Build.MANUFACTURER.toString().equals("samsung")) {
        Handler handler = new Handler();
        final Runnable runnable = new Runnable() {
            @Override
            public void run() {
                getCurrentNode().performAction(AccessibilityNodeInfo.ACTION_PASTE);
            }
        };
        handler.postDelayed(runnable, 100);
    } else {
        getCurrentNode().performAction(AccessibilityNodeInfo.ACTION_PASTE);
    }
    

    所以基本上我们在粘贴之前稍等片刻(100 毫秒,YMMV)让剪贴板稳定下来。我承认这并不完美,但这适用于 API 18+。

    API 21+ 的另一个选项是使用 AccessibilityNodeInfo.ACTION_SET_TEXT 而不是粘贴(显然仅用于文本),并以这种方式插入正确的文本。这是一个如何工作的示例:

    Bundle arguments = new Bundle();
    arguments.putString(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "node text plus pasted text");
    getCurrentNode().performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments);
    

    注意:以上不管理光标,因此将始终将其放在文本字段的末尾。您可以使用AccessibilityNodeInfo.ACTION_SET_CURSOR 和一个bundle 来管理光标(与上面设置文本的方式类似)

    【讨论】:

      猜你喜欢
      • 2022-11-30
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2021-12-04
      • 2022-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多