我正在尝试创建一个使用Camera服务显示预览的Glass GDK应用.不幸的是,我目前有一个错误,当尝试使用Camera.open()打开Camera时抛出RuntimeException.通过语音触发器打开活动时,我只会遇到此错误,而不能从“启动器”菜单中选择该应用程序.
通过此菜单启动“活动”与语音触发器的方式有何不同?
一些相关代码如下.
@Override
public void onCreate(Bundle savedInstanceState) {
mGestureDetector = createGestureDetector(this);
super.onCreate(savedInstanceState);
ctx = this;
act = this;
setContentView(R.layout.activity_main);
preview = new Preview(this, (SurfaceView)findViewById(R.id.surfaceView));
((FrameLayout) findViewById(R.id.preview)).addView(preview);
preview.setKeepScreenOn(true);
}
@Override
protected void onResume() {
super.onResume();
try {
if (camera == null) {
Log.d(TAG, "opening a camera on resume.");
camera = Camera.open();
preview.setCamera(camera);
camera.startPreview();
}
} catch(java.lang.RuntimeException e) {
Log.e(TAG, e.getMessage());
}
}
@Override
protected void onPause() {
if(camera != null) {
camera.stopPreview();
preview.setCamera(null);
Log.d(TAG, "Releasing a camera on pause.");
camera.release();
camera = null;
}
super.onPause();
}
@Override
protected void onDestroy() {
if(camera != null) {
camera.stopPreview();
preview.setCamera(null);
Log.d(TAG, "Releasing a camera on destory.");
camera.release();
camera = null;
}
super.onDestroy();
}
解决方法:
由于使用语音触发器时该按钮不起作用,因此听起来像是一种可能的竞赛情况,即在屏幕上显示您的活动时麦克风没有松开.
您可以尝试使用指数补偿来捕获摄像机的方法吗?基本上是尝试捕获相机,如果遇到异常,请在短时间后重试,以固定的尝试次数稍微增加等待时间.
还请考虑在issue tracker上提交错误,尤其是如果您可以可靠地确定在获取摄像机/麦克风之前需要多少延迟.