Android服务中读取用户输入

5

我希望编写一个Android应用程序,它将作为后台服务运行,监听特定的手势或按键事件,并触发相应的操作。使用服务是否可以实现这样的功能?如果可以,能否指导我正确的方向。我已经搜索了很多地方,但似乎找不到答案。


通常情况下,您不应该能够从服务中捕获手势或按键。看一下谷歌手势搜索栏。他们使用长按搜索按钮来打开一个活动,然后捕获手势。但我不知道他们使用什么意图或信号来通知长时间搜索按下。 - Janusz
2个回答

1

它们的接触并不难读取,但这种接触只提供位置信息,而不是时间信息,也不会在上升或下降时发生。

为您服务

@Override
public void onDestroy() {
    super.onDestroy();
    if (layout != null) {
        ((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(layout);
        layout = null;
    }
}
@Override
public void onCreate() {
    super.onCreate();
    layout = new RelativeLayout(this);
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                        WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSLUCENT);
    params.setTitle("test");
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    wm.addView(layout, params);
}

至于你的触摸处理程序,它必须是这样的

public boolean gestureHandler(MotionEvent event, boolean eat) {
        if(event.getAction() == MotionEvent.ACTION_OUTSIDE)

窗口管理器不允许您从服务中添加视图...此代码会引发异常。 - FoamyGuy

0

除非在与发送其输入的应用程序顶部合作的情况下进行此操作,否则这将是一种巨大的安全漏洞,而 Android 架构旨在禁止此类漏洞。要执行此操作,您需要修改平台,并由某些具有访问原始触摸和按钮输入权限的内容运行进行监视,可能作为该驱动程序的一部分。

换句话说,您可以在自己的已 root 的手机或制造的设备上艰难地完成此操作,但对于大多数人来说不可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接