kah*_*hlk 7 events android code-injection
我在远程控制应用程序上编程.其中一项任务是注入角色.我目前使用的代码如下所示:
Instrumentation instr = new Instrumentation();
String str="a";
// basically the same like calling instr.sendStringSync(str);
char[] chars = str.toCharArray();
KeyCharacterMap keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
KeyEvent[] keyEvents = keyCharacterMap.getEvents(chars);
if (keyEvents != null) {
for (KeyEvent kev : keyEvents) {
instr.sendKeySync(kev);
}
}
Run Code Online (Sandbox Code Playgroud)
这完全适用于英文字符(字符显示在EditText框中).但是,如果我尝试注入例如韩文字符,则会失败.函数getEvents返回null,即使我配置了韩语和键盘也是如此.
我知道还有另一种直接注入字符串的方法:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
instr.sendKeySync(event);
Run Code Online (Sandbox Code Playgroud)
这也不起作用 - 在EditText框中没有显示任何字符,并且在我的测试活动中也没有调用onKeyMultiple().
这很奇怪,因为具有相同事件的dispatchKeyEvent()在我的测试活动中起作用:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
dispatchKeyEvent(event);
Run Code Online (Sandbox Code Playgroud)
我的远程控制应用程序需要注入事件,无论哪个活动.这可以使用Instrumentation(带有android.permission.INJECT_EVENTS平台密钥和签名).
如何使用仪器注入非英文字符?还有另一种方法来实现这一目标吗?例如,使用dispatchKeyEvent(也必须适用于其他活动/应用程序).
Art*_*iyk -2
您可以将此方法和 InputFilter 用于 EditText:
private boolean isLatinSymbolOrDigit(char c)
{
// Allow [a-zA-Z0-9]
if ('0' <= c && c <= '9')
return true;
if ('a' <= c && c <= 'z')
return true;
if ('A' <= c && c <= 'Z')
return true;
return false;
}
InputFilter filter = new InputFilter()
{
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
{
for (int i = start; i < end; i++)
{
if (isLatinSymbolOrDigit(source.charAt(i)))
{
}
else
{
//wrong character
return "";
}
}
return null;
}
};
editText.setFilters(new InputFilter[] {filter});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1492 次 |
| 最近记录: |