返回滑动无法在Google Glass活动中使用

时间:2015-01-22 15:31:48

标签: android google-glass google-gdk

我已为Google Glass创建了一项基本活动,但它不允许我使用标准向下滑动将堆栈中的内容恢复到之前的活动。我尝试过使用此代码重点关注活动:

@Override
protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.layout_orienation_detection_activity);

    mView = getWindow().getDecorView().findViewById(android.R.id.content);
    mView.setFocusable(true);
    mView.setFocusableInTouchMode(true);
}

@Override
protected void onStart() {
    super.onStart();

    mGestureDetector = createGestureDetector(this);

    serviceIntent = new Intent(this, SensorService.class);
    startService(serviceIntent);

    mView.requestFocus();
}

我还尝试使用onKeyDown()方法创建自己的向下滑动功能,我尝试为TAP和SWIPE_DOWN创建一个手势检测器,然后将finish()添加到各自的回调中。我的手势和密钥检测器代码与https://developers.google.com/glass/develop/gdk/touch上的Google Developers网站上的代码完全相同,但仍然无效。我认为无论如何这都不是必要的,因为Glass的标准背刷应该可以工作。

我不知道这与它有什么关系,但我的活动开始提供服务。

此外,有时它在我安装应用程序后第一次工作,但之后它会立即停止工作。

有没有人对问题是什么有任何想法?非常令人沮丧的是必须关闭玻璃设备或等待屏幕超时才能退出活动。

编辑:问题在于从活动中启动服务,就像我从我的活动中删除了startService(intent)调用一样,向下滑动工作正常。那么我怎样才能运行后台服务,还可以向下滑动?

1 个答案:

答案 0 :(得分:1)

欢迎在Google Glass上做一些事情 - 并非一切都按预期运作。我遇到了很多问题,但已经找到了一些解决方法。无论哪种方式,当我做到这一点时,设置第一个手势检测是棘手的。我将为您提供两个工作选项,我现在正在使用我制作的玻璃应用程序运行。

通过onKeyDown():

    import android.view.KeyEvent;

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if( keyCode == KeyEvent.KEYCODE_BACK ) {
            // handles swipe down
            return true;
        }
        else if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
            // handles tap
            return true;
        }
        return false;
    }

设置手势检测比较棘手,但看起来你错过了你发布的大量代码。这是我现在在应用程序中进行手势检测的工作,我只包括相关位:

    import android.view.MotionEvent;

    import com.google.android.glass.touchpad.Gesture;
    import com.google.android.glass.touchpad.GestureDetector;

    private GestureDetector mGestureDetector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //instantiate the gesture detector
        mGestureDetector = createGestureDetector(this);
    }

    // Actually create the gesture detector
    private GestureDetector createGestureDetector(Context context) {
        GestureDetector gestureDetector = new GestureDetector(context);
        gestureDetector.setBaseListener( new GestureDetector.BaseListener() {
            @Override
            public boolean onGesture(Gesture gesture) {
                if (gesture == Gesture.SWIPE_RIGHT) { 
                    // pickup right swipe
                    return true;
                } else if (gesture == Gesture.SWIPE_LEFT) {                         
                    // pickup left swipe
                    return true;
                } else if (gesture == Gesture.SWIPE_DOWN) {
                    // pickup down swipe
                    return true;
                } else if (gesture == Gesture.TAP) {
                    // pickup tap
                    return true;
                }
                return false;
            }
        });
        return gestureDetector;
    }

    //Send generic motion events to the gesture detector
    @Override
    public boolean onGenericMotionEvent(MotionEvent event) {
        if (mGestureDetector != null) {
            return mGestureDetector.onMotionEvent(event);
        }
        return false;
    }

就你这样说而言:

    Also, sometimes it works the first time after I install the application, but then it stops working immediately after that.

我遇到了类似的问题,我目前仍在努力解决。虽然不知道更多,但很难解决这个问题。您是否尝试更新Glass上的固件?检查它是否是最新的,否则你在代码中做了什么?如果您在活动之间切换,也许您在处理状态信息时遇到问题?只是一个猜测..

注意:如果你正在使用MediaPlayer进行osmething,那么左右滑动的手势检测和关键事件会在Glass上被破坏。我们在一段代码中创建了一个VideoView,并且只能检测向下滑动并点击其他内容,但我们仅在使用VideoView / MediaPlayer的代码块中遇到此问题。