Droid X カメラのオートフォーカス コールバックは常に false を返します
-
25-10-2019 - |
質問
Motorola Droid X を使用していますが、何らかの理由で、onAutoFocus(boolean success, Camera カメラ) の成功の success 変数が常に false を返します。Droid 2 を含む他のデバイスでも動作するようですので、デバイス固有の問題のようです。
私のコードは基本的にこれです:
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
takePicture();
}
});
解決
数時間のデバッグの後、問題は表面ビューのプレビューサイズを大きなサイズに設定することでした。なぜそれがオートフォーカスに影響するのか理解できませんが、プレビューサイズをより小さなサイズに設定すると、問題が解決しました。それは、それが機能しなかった唯一の解像度であったため、プレビューサイズが画面解像度よりも大きいために引き起こされる可能性があります。これがこの問題に遭遇するかもしれない他の人に役立つことを願っています。
更新:プレビューページのレイアウトを変更した後、この問題に再び遭遇しましたが、特定のプレビューサイズでフォーカスが失敗したようです。これまでのところ、これらのサイズは私にとって失敗しました:720x480、1280x720
他のヒント
私はdt0の答えに同意します。私は Android サンプルの Preview クラスを使用していますが、それを修正するために、最適なプレビュー サイズを決定するときにアスペクト許容値を単純に増加しました。
private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
final double ASPECT_TOLERANCE = 0.2; // this was 0.1
double targetRatio = (double) w / h;
...
}
この変更により、最適なサイズが 720x480 に設定される (オート フォーカスが失敗する) のではなく、最適なサイズが 640x480 に設定され、合格します。なぜこれで問題が解決するのかはまだわかりませんが (実際のビューのサイズは 734x480)、解決したことに満足しています。
私の仕事には0.3で行かなければなりませんでした。
final double ASPECT_TOLERANCE = 0.3; // this was 0.1
また、私が電話した場合、私はそれを見つけました startPreview()
の中に surfaceCreated(SurfaceHolder holder)
, 、自動フォーカスは、見栄えの良いプレビューアスペクト比で動作します。しかし、プレビューは銀河ではまったく機能しません。