我正在修改Android 4.0.3.r1的自定义导航栏,并希望发送关键事件,如" Home"和"返回"。我的申请不是一个系统:
IWindowManager mWindowManager = IWindowManager.Stub.asInterface(
ServiceManager.getService(Context.WINDOW_SERVICE));
mWindowManager.injectKeyEvent( ev, false );
它不起作用,因为我无法从系统应用程序中获取android.permission.INJECT_EVENTS
。我怎么能这样做?
答案 0 :(得分:4)
BaseInputConnection mInputConnection = new BaseInputConnection(targetView, true);
mInputConnection.sendKeyEvent(new KeyEvent(...));
答案 1 :(得分:3)
你可以试试这个
try
{
String keyCommand = "input keyevent " + KeyEvent.KEYCODE_MENU;
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(keyCommand);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
当然,您可以选择命令input text ...
来输入文本。
答案 2 :(得分:2)
这些都不是有效的。要使用以下代码进入主屏幕。
Intent home = new Intent(Intent.ACTION_MAIN);
home.addCategory(Intent.CATEGORY_HOME);
//home.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(home);
如果您没有从activity / fragment调用,则可能必须取消注释标记部分。 如果回到下面,代码可以在某些设备上运行。
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
请告诉我这是否有帮助!
答案 3 :(得分:1)
以下是Roman回答的精确度
BaseInputConnection mInputConnection = new BaseInputConnection( findViewById(R.id.main_content), true);
KeyEvent kd = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MENU);
KeyEvent ku = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MENU);
mInputConnection.sendKeyEvent(kd);
mInputConnection.sendKeyEvent(ku);
答案 4 :(得分:1)
我以前也遇到过同样的问题,我通过下面的方式解决了KEY_INJECT_EVENT_PERMISSION问题。
第1步:您需要获取Device ROM的签名(对我来说,文件名为signapk)。
步骤2:然后,您需要获取platform.pk8和platform.x509.pem文件。
第3步:生成应用程序的调试apk。
第4步:将上述所有文件放在一个文件夹中。
第5步:获得所有上述文件后,请运行下面提到的命令。
java -jar signapk.jar platform.x509.pem platform.pk8 your_debug_app.apk customname.apk
第6步:此后,您可以在同一文件夹中获得一个签名的apk(customname.apk)。一旦获得,请运行以下命令。
adb install -r app-release-signed.apk
第7步:现在将启用Inject_Event_Permisson。
答案 5 :(得分:0)
还有InputConnection
的{{1}}功能。 sendKeyEvent
仅为API级别3。
答案 6 :(得分:0)
恢复旧线程 - 您可以使用相对较新的辅助功能API执行主页和后退 - 请在此处查看“performGlobalAction”: http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html
(特别是GLOBAL_ACTION_HOME和GLOBAL_ACTION_BACK操作)
当然,您需要对辅助功能服务具有适当的权限,但这不需要root
答案 7 :(得分:0)
你可以试试这个。
long now = SystemClock.uptimeMillis();
BaseInputConnection mInputConnection = new BaseInputConnection(findViewById(R.id.MainActivity), true);
KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_HOME, 0);
mInputConnection.sendKeyEvent(down);
此代码对我有用。
注意:请记住将“R.id.MainActivity”替换为您的活动名称。
答案 8 :(得分:-1)
它对我有用:
public static void simulateKey(final int KeyCode) {
new Thread() {
@Override
public void run() {
try {
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyCode);
} catch (Exception e) {
Log.e("Exception when sendKeyDownUpSync", e.toString());
}
}
}.start();
}