7

Lastpass 如何管理这个?!

AccessibilityNodeInfo 有一个 setText() 方法,但我觉得这是文档状态的红鲱鱼,

注意:不能从 AccessibilityService 调用。此类在交付给 AccessibilityService 之前是不可变的。

不久前另一位用户提出了类似的问题,但最近对 LastPass 的更新证明这确实是可能的。

在 AccessibilityNodeInfo 中设置文本

4

2 回答 2

7

我找到了一些比 ACTION_PASTE 更好的解决方案。我觉得 ACTION_PASTE 会造成延迟并且无法正常工作。ACTION_SET_TEXT 对我来说很好,请与您联系。

public void pasteText(AccessibilityNodeInfo node, String text) {
        Bundle arguments = new Bundle();
        arguments.putString(AccessibilityNodeInfoCompat.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, text);
        node.performAction(AccessibilityNodeInfoCompat.ACTION_SET_TEXT, arguments);
    }
于 2017-03-08T10:34:19.623 回答
4

我已经想通了,并在我的应用程序 TapN 中实现了它。

首先获取原始剪贴板内容,保存,将内容复制到剪贴板,然后粘贴,然后将原始内容复制回来。

    public void inputData(Context c, String data, AccessibilityNodeInfo source) {
    try {

            String lastClip = clipboard.getPrimaryClip().getItemAt(0).coerceToText(c)
                    .toString();
        } catch (Exception e) {
            lastClip = "";
        }
        Log.d("THE NODE INFO", source.toString());

        ClipData clip = ClipData.newPlainText("nfc_input", data);
        clipboard.setPrimaryClip(clip);

        Log.d("SENDING DATA", Boolean.toString(source.refresh()));
        Log.d("SENDING DATA", Boolean.toString(source
                .performAction(AccessibilityNodeInfo.ACTION_PASTE)));
        ClipData clip = ClipData.newPlainText("nfc_input", lastClip);
        clipboard.setPrimaryClip(clip);
}
于 2014-04-28T15:27:52.653 回答