以前に回答を投稿できませんでした。それが正しいことかどうかはわかりませんでしたが、アプリが約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に掲載される予定です。