通过代码模拟触摸控件

时间:2015-02-27 08:16:52

标签: android google-glass google-gdk

我试图通过使用头部手势来浏览我的Google Glass应用程序。我能够识别出左右上方的头部姿势。当识别出这个手势时,他们每个人都有自己的方法

现在我需要在每个方法中模拟相应的触摸手势。所以它会认为我向左或向右滑动,这样我就能用头部手势浏览卡片。

有没有人知道如何实现这个目标?


修改

我创建了一个快速的hello world应用程序。我添加了我的头像代码,并开始尝试让密钥正常工作。

我在myCreate()

中添加了以下内容
Instrumentation instr = new Instrumentation();

然后我将以下几行添加到每个相应的headgesture方法中。

  • 向上跳跃应该与点击触控板inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER)
  • 相对应
  • 左侧的Headgesture应与触摸板上留下的左侧滑动inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_LEFT);
  • 相对应
  • 右侧的Headgesture应与触摸板上的滑动相对应inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_RIGHT);

他们现在正在作出相应的回应,但是我得到了例外说法:

 java.lang.RuntimeException: This method can not be called from the main application thread

2 个答案:

答案 0 :(得分:0)

解决方案

最后,我的方向与我在上面编辑中提到的方向不同。

我发现可以使用

调用shell中的触控
adb shell input keyevent <keycode here>

然后我找到了在android中使用它的方法,我有以下类名为issueKey

public class issueKey {
public void issueKey(int keyCode)
{
    try {
        java.lang.Process p = java.lang.Runtime.getRuntime().exec("input keyevent " + Integer.toString(keyCode) + "\n");
    } catch (Exception e) {
        Log.wtf("IssueKeyError", e.getMessage());
    }
}
}

然后我只需调用该类并传递相应手势的键码

mIssueKey.issueKey(4);//functions as swipe down

以下是我为感兴趣的人测试的密钥代码列表。

每个按钮/手势的键

  • 4:向下滑动
  • 21:向左滑动
  • 22:向右滑动
  • 23:点按
  • 24:提升音量
  • 25:音量降低
  • 26:锁定/解锁屏幕
  • 27:相机按钮

然而,我现在想知道的是。什么是最佳实践,通过使用asyncTask获得我在编辑中提到的解决方案,或者是我目前正在使用的解决方案。

答案 1 :(得分:0)

如果您使用单独的线程来调用Instrumentation方法,则使用sendKeyDownUpSync类将起作用。

可以使用以下步骤完成:

  1. 从您的活动中创建并启动一个帖子
  2. 在运行方法中,使用Looper类并按照here
  3. 说明创建Handler
  4. 每次要拨打sendKeyDownUpSync时,都会将Runnable个实例发布到Handler,并sendKeyDownUpSync方法调用run
  5. 类似的代码示例(不是来自我)可用here

相关问题