我macking自定义导航栏到Android 4.0.3.r1,想发送类似“家”和“后退”按键事件。 我的应用程序不是一个系统,因此:
IWindowManager mWindowManager = IWindowManager.Stub.asInterface(
ServiceManager.getService(Context.WINDOW_SERVICE));
mWindowManager.injectKeyEvent( ev, false );
这是行不通的,因为我无法得到android.permission.INJECT_EVENTS
从没有系统的应用。 我怎样才能做到这一点?
BaseInputConnection mInputConnection = new BaseInputConnection(targetView, true);
mInputConnection.sendKeyEvent(new KeyEvent(...));
你可以试试这个
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 ...
输入文本。
这些都不是有效的。 要进入主屏幕从下面的代码使用。
Intent home = new Intent(Intent.ACTION_MAIN);
home.addCategory(Intent.CATEGORY_HOME);
//home.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(home);
如果不从活动/片段喊你可能要取消对旗形部分。 为了要回下面的代码工作的一些设备。
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
让我知道如果这有助于!
下面是一些精密罗马答案
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);
还有InputConnection
的sendKeyEvent
功能。 InputConnection
仅API级别3。
振兴老话题-你可以用比较新的可访问性API执行主页和返回-看看“performGlobalAction”在这里: http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html
(具体地与GLOBAL_ACTION_HOME和GLOBAL_ACTION_BACK动作)
当然,你需要为一项辅助服务,适当的权限,但这并不需要root
你可以试试这个。
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”你的活动名称。
这个对我有用:
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();
}