如何使用Android InputMethodService从其他服务发送键事件?

时间:2019-05-20 20:33:07

标签: java android

我正在尝试编写一个简单的休息服务以用于Shield TV。它将侦听TCP端口上的HTTP请求,然后将关键事件发送到活动的活动。

其余服务侧已准备就绪。我可以调用端点并在Shield TV上启动应用程序。 但是,由于我没有活动,因此无法发送关键事件。 (当我在屏幕上进行活动时,它会起作用)

因此,我决定将我的应用注册为输入法。我可以在Android系统输入设置中将我的应用显示为虚拟键盘。

这是我遵循的教程: https://developer.android.com/guide/topics/text/creating-input-method.html

但是我不知道如何使用Input Method服务发送键事件。我尝试在InputMethod Service的onCreate方法中使用以下代码。 但是,似乎未调用onCreate。因为websocket没有激活。 (当我在自己的服务上使用此代码,并且如果我从MainActivity启动该服务,则websocket处于活动状态)

公共类SoftKeyboard扩展了InputMethodService {

private InputMethodManager mInputMethodManager;

@Override public void onCreate() {
    super.onCreate();
    mInputMethodManager = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);

    AsyncHttpServer server = new AsyncHttpServer();
    List<WebSocket> _sockets = new ArrayList<WebSocket>();
    server.get("/test", new HttpServerRequestCallback() {
        @Override
        public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {

            getCurrentInputConnection().sendKeyEvent(
                    new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
            getCurrentInputConnection().sendKeyEvent(
                    new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
        }
    });
    server.listen(5050);

}

}

也许我应该从其他服务(通过main活动启动)中调用Input Method服务中的一个函数 但是我也不知道该怎么做。

我将不胜感激。

谢谢。

0 个答案:

没有答案