Lastpass 如何管理这个?!
AccessibilityNodeInfo 有一个 setText() 方法,但我觉得这是文档状态的红鲱鱼,
注意:不能从 AccessibilityService 调用。此类在交付给 AccessibilityService 之前是不可变的。
不久前另一位用户提出了类似的问题,但最近对 LastPass 的更新证明这确实是可能的。
Lastpass 如何管理这个?!
AccessibilityNodeInfo 有一个 setText() 方法,但我觉得这是文档状态的红鲱鱼,
注意:不能从 AccessibilityService 调用。此类在交付给 AccessibilityService 之前是不可变的。
不久前另一位用户提出了类似的问题,但最近对 LastPass 的更新证明这确实是可能的。
我找到了一些比 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);
}
我已经想通了,并在我的应用程序 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);
}