【问题标题】:android reading user input in a serviceandroid在服务中读取用户输入
【发布时间】:2011-04-15 00:10:30
【问题描述】:

我想编写一个 android 应用程序,它是一个后台服务,可以侦听特定手势或按键,然后触发操作。甚至有可能用服务做这样的事情吗?如果是这样,有人可以指导我正确的方向。我搜索了高低似乎可以找到答案。

【问题讨论】:

  • 一般来说,您应该无法从服务中捕获手势或按键。看看谷歌手势搜索栏。他们使用长按搜索按钮来打开一个活动,然后捕获该手势。但我不知道他们使用什么意图或信号来获得长搜索新闻的通知。

标签: java android


【解决方案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)

【讨论】:

  • 窗口管理器不允许您从服务中添加视图...此代码引发异常。
【解决方案2】:

这样做(除了通过向您发送输入来合作的应用程序)将是一个巨大的安全漏洞,这是 android 架构旨在禁止的。要做到这一点,您需要修改平台并通过可以访问原始触摸和按钮输入的运行来完成监视,可能作为驱动程序的一部分。

换句话说,您可以在自己的手机或您制造的设备上执行此操作,但它对大多数人不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多