从(辅助功能)服务填写任何应用程序的EditText?

时间:2014-04-16 16:21:46

标签: java android accessibility lastpass

Lastpass如何管理这个?!

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

注意:无法从AccessibilityService调用。在传递给AccessibilityService之前,此类是不可变的。

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

Set text in AccessibilityNodeInfo

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

我发现了一些比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);
    }