Не удалось опубликовать ответ ранее.Я не был уверен, что это правильно, но теперь, когда приложение работает правильно на 150 устройствах, думаю, это работает.
Итак, приложение камеры Android в функции onCreate имеет следующий код:
/*
* 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 как отдельное приложениев ближайшее время.