いつものことですが、答えは簡単でした。しばらくインターネットを閲覧した後、最後のログ メッセージを投稿するネイティブ コードを見つけました。
//waiting for preview thread to complete before clearing of the buffers
mPreviewThreadWaitLock.lock();
while (mPreviewThreadRunning) {
LOGI("runframethread: waiting for preview thread to complete.");
mPreviewThreadWait.wait(mPreviewThreadWaitLock);
LOGI("initPreview: old preview thread completed.");
}
mPreviewThreadWaitLock.unlock();
このコードによると、Camera.stopPreview();
各呼び出しの前に手動で呼び出しようとするcamera.takePicture(null, null, null, pictureCallback);
と、機能します。
更新通常、プレビューを停止して写真を撮ることはできないため、新しいカメラドライバーを搭載したデバイスで
はソリューションが機能しないようです。Camera.stopPreview();
しかし、使用する代わりに、Camera.stopPreview();
単に削除しようとするonPreviewCallback
とmCamera.setPreviewCallback(null);
、古いカメラドライバーと新しいカメラドライバーでテストしたすべてのデバイスで動作します!!!
mCamera.setPreviewCallback(null);
camera.takePicture(null, null, null, pictureCallback);