我使用与Google的Camera app代码完全相同的代码,但结果却非常奇怪。在我的应用程序和来自Google的Camera应用程序中,预览会被卡住,或者被怪异的线条所覆盖。预览通常是我在手机自己的相机应用程序中看到的最后一件事。
三星型号是I9003。在三星刚刚停产的I9000上,相同的代码运行良好。该代码也适用于HTC Wildfire。
对此有何决议?
注意到在我的应用程序中拍摄照片后,相机预览变得正常。 Google相机应用程序也发生了同样的事情。
答案 0 :(得分:0)
无法提前发布答案。不确定这是否是正确的做法,但现在应用程序在大约150台设备上运行正常,我想这可行。
因此onCreate函数中的Android相机应用程序具有以下代码:
/*
* To reduce startup time, we start the preview in another thread.
* We make sure the preview is started at the end of onCreate.
*/
Thread startPreviewThread = new Thread(new Runnable() {
public void run() {
try {
mStartPreviewFail = false;
startPreview();
} catch (CameraHardwareException e) {
// In eng build, we throw the exception so that test tool
// can detect it and report it
if ("eng".equals(Build.TYPE)) {
throw new RuntimeException(e);
}
mStartPreviewFail = true;
}
}
});
startPreviewThread.start();
出于某种原因,这对GT-I9003无效。我注意到的是,拍照后预览会正常进行,因此硬件没有任何问题。我试图回溯拍摄照片后发生的事情,然后将其与首次初始化相机的代码进行比较。我从onCreate中注释掉了这段代码。来自相机应用程序的onResume看起来像这样:
if (mSurfaceHolder != null) {
// If first time initialization is not finished, put it in the
// message queue.
if (!mFirstTimeInitialized) {
mHandler.sendEmptyMessage(FIRST_TIME_INIT);
} else {
initializeSecondTime();
}
}
我将其更改为:
if (!mFirstTimeInitialized) {
initializeFirstTime();
} else {
initializeSecondTime();
}
还有其他一些变化,很快就会把它作为一个单独的应用程序放在GitHub上。