Java 从(辅助功能)服务填写任何应用程序的编辑文本?
Lastpass是如何管理的 AccessibilityNodeInfo有一个setText()方法,但我觉得这是一个危险的文件状态 注意:无法从AccessibilityService调用。此类在交付给AccessibilityService之前是不可变的 不久前,另一位用户问了一个类似的问题,但最近对LastPass的更新证明这确实是可能的Java 从(辅助功能)服务填写任何应用程序的编辑文本?,java,android,accessibility,lastpass,Java,Android,Accessibility,Lastpass,Lastpass是如何管理的 AccessibilityNodeInfo有一个setText()方法,但我觉得这是一个危险的文件状态 注意:无法从AccessibilityService调用。此类在交付给AccessibilityService之前是不可变的 不久前,另一位用户问了一个类似的问题,但最近对LastPass的更新证明这确实是可能的 我已经解决了这个问题,并在我的应用程序TapN中实现了它 首先获取原始剪贴板内容,保存该内容,将内容复制到剪贴板,然后粘贴,然后将原始内容复制回剪贴板
我已经解决了这个问题,并在我的应用程序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);
}
我找到了更好的解决办法,而不是采取行动。我觉得ACTION_PASTE造成延迟,无法正常工作。动作设置文本对我来说很好,请与您联系
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);
}
他们可能正在使用ACTION_PASTE,ClipboardManager.API文档称ACTION_PASTE需要API级别18。对于API级别14,我们如何才能做到同样的效果?对于低于android 18的用户,使用AccessibilityNodeInfoCompat.ACTION_粘贴看起来是一个更好的解决方案,因为它也不会将内容暴露给剪贴板管理器。