我怎么能在android系统发送按键事件?(How can I send key events in

2019-07-01 21:45发布

我macking自定义导航栏到Android 4.0.3.r1,想发送类似“家”和“后退”按键事件。 我的应用程序不是一个系统,因此:

IWindowManager mWindowManager = IWindowManager.Stub.asInterface(
                ServiceManager.getService(Context.WINDOW_SERVICE));
mWindowManager.injectKeyEvent( ev, false );

这是行不通的,因为我无法得到android.permission.INJECT_EVENTS从没有系统的应用。 我怎样才能做到这一点?

Answer 1:

BaseInputConnection  mInputConnection = new BaseInputConnection(targetView, true);
mInputConnection.sendKeyEvent(new KeyEvent(...));


Answer 2:

你可以试试这个

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 ...输入文本。



Answer 3:

这些都不是有效的。 要进入主屏幕从下面的代码使用。

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));

让我知道如果这有助于!



Answer 4:

下面是一些精密罗马答案

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);


Answer 5:

还有InputConnectionsendKeyEvent功能。 InputConnection仅API级别3。



Answer 6:

振兴老话题-你可以用比较新的可访问性API执行主页和返回-看看“performGlobalAction”在这里: http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html

(具体地与GLOBAL_ACTION_HOME和GLOBAL_ACTION_BACK动作)

当然,你需要为一项辅助服务,适当的权限,但这并不需要root



Answer 7:

你可以试试这个。

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”你的活动名称。



Answer 8:

这个对我有用:

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();
}


文章来源: How can I send key events in android?