12

私は Android で Camera API を使用しており、Samsung Galaxy や HTC Desire などの複数のプラットフォームでコードを動作させることができました。これまでのところ、断続的な HTC Desire Z でのみ問題が発生しています。

私のコードでは、次の命令を呼び出しています

camera.startPreview();
camera.autoFocus(autoFocusCallback);

ここで、必要な autoFocusCallback クラスを既に作成しています。私が問題を抱えているものを含め、このコードは電話でも機能することをもう一度強調したいので、コードを精査しないでください. :) コールバックが呼び出された後、私のコードは写真の撮影に進みますが、その部分は今のところ関係ありません。

断続的な問題は、特定のランダムな画像 (20 ~ 100 回に 1 回発生) で、コールバックが発生しないことです。私自身の Log.i() で、これが最後に実行されたコマンドであることを確認しました (つまり、コードはコールバックに到達しません)。デバッグは、エラーが報告されていないことも示しています。

安心していただくために、私のコールバックは次のようになります

AutoFocusCallback autoFocusCallback = new AutoFocusCallback() {
  @Override
  public void onAutoFocus(boolean success, Camera camera) {
    Log.i("tag","this ran"); 
    ...
    ...
  }
};

実行が成功した場合の Logcat の結果は、次のようになります。

07-12 10:17:50.564: DEBUG/QualcommCameraHardware(1223): startPreview X
07-12 10:17:50.564: DEBUG/QualcommCameraHardware(1223): autoFocus E
07-12 10:17:50.564: DEBUG/QualcommCameraHardware(1223): autoFocus X
07-12 10:17:50.564: DEBUG/QualcommCameraHardware(1223): runAutoFocus E
07-12 10:17:50.564: DEBUG/QualcommCameraHardware(1223): af start (fd 49)
07-12 10:17:51.184: DEBUG/QualcommCameraHardware(1223): native_set_afmode: ctrlCmd.status == 0
07-12 10:17:51.184: DEBUG/QualcommCameraHardware(1223): af done: 1
07-12 10:17:51.184: DEBUG/QualcommCameraHardware(1223): runAutoFocus X
07-12 10:17:51.184: DEBUG/QualcommCameraHardware(1223): takePicture(479)

でも問題の走りはこんな感じ

07-12 10:17:52.194: DEBUG/QualcommCameraHardware(1223): startPreview X
07-12 10:17:52.194: DEBUG/QualcommCameraHardware(1223): autoFocus E
07-12 10:17:52.194: DEBUG/QualcommCameraHardware(1223): autoFocus X
07-12 10:17:52.194: DEBUG/QualcommCameraHardware(1223): runAutoFocus E
07-12 10:17:52.194: DEBUG/QualcommCameraHardware(1223): af start (fd 49)

そしてハングします。

誰かがこの問題について何か考えを持っているかどうか、または同様のことを経験したことがあるかどうか知りたいですか? 同様の問題を抱えたネット上のスレッドを1つだけ見つけることができました

4

2 に答える 2

3

特定の問題の解決策ではありませんが、一般的な質問は、startpreview の前に autofocus を呼び出す可能性があるということです。この場合も、プレビューがオンになっているときにオートフォーカスは発生しません。

ドキュメントから

startPreview()「このメソッドは、プレビューがアクティブな場合 ( ~の間 )にのみ有効ですstopPreview()。」

于 2012-12-08T08:24:18.643 に答える