1

AndroidカメラAPIを使用するプロジェクトを1つ作成しました。しかし、(Samsung galaxy S)のような古いAndroid携帯では、厄介な問題があります. 写真を撮ろうとすると、アプリケーションがフリーズし、数秒後に ANR ダイアログが表示されます。プログラム カメラを強制終了した後もブロックされており、システム カメラ アプリケーションからでも使用できません。電話の再起動だけが役に立ちました。
私が受け取った最後のログメッセージは次のとおりです。

QualcommCameraHardware(133): runframethread: waiting for preview  thread to complete. 

新しいデバイスではすべて正常に動作します。これを修正するにはどうすればよいですか。

4

1 に答える 1

1

いつものことですが、答えは簡単でした。しばらくインターネットを閲覧した後、最後のログ メッセージを投稿するネイティブ コードを見つけました。

//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();単に削除しようとするonPreviewCallbackmCamera.setPreviewCallback(null);、古いカメラドライバーと新しいカメラドライバーでテストしたすべてのデバイスで動作します!!!

mCamera.setPreviewCallback(null);
camera.takePicture(null, null, null, pictureCallback);
于 2013-05-16T10:44:39.910 に答える