我已为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)调用一样,向下滑动工作正常。那么我怎样才能运行后台服务,还可以向下滑动?
答案 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的代码块中遇到此问题。