Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


La devolución de llamada de autofocus de la cámara no ocurre

Estoy utilizando la cámara API en el Android y conseguí mi código para trabajar en varias plataformas, incluyendo el Samsung Galaxies y HTC Desire. Hasta ahora sólo estoy experimentando un problema en el HTC Desire Z, que es intermitente.

En mi código estoy llamando a las siguientes instrucciones

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

Donde ya he creado la clase autoFocusCallback requerida. Me gustaría recalcar una vez más que este código funciona en los teléfonos, incluyendo el que estoy teniendo problemas con, así que no vayas escudriñando el código. 🙂 Después de llamar la devolución de llamada, mi código continúa para tomar la foto, pero esa parte es irrelevante por ahora.

El problema intermitente es que para una cierta imagen aleatoria (sucede una entre 20-100 veces), la devolución de llamada no sucede. He verificado con mi propio Log.i () que este es el último comando realizado (es decir, el código no llega a la devolución de llamada). Depurar también muestra que no se informa de errores.

Sólo para poner su mente en la facilidad, mi devolución de llamada se parece a esto

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

Los resultados de Logcat para una ejecución exitosa son algo así

 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) 

Pero la carrera problemática es así

 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) 

Y luego se cuelga.

Me gustaría saber si alguien tiene alguna idea sobre este problema, o si ha experimentado algo similar? Sólo he conseguido encontrar un hilo en la red con problemas similares, aquí es http://groups.google.com/group/android-developers/browse_thread/thread/75ecb8db0ae02bdb

  • HTC sólo Hard Crash dentro de OpenGL
  • SetOrientationHint gira el video en sentido contrario a las agujas del reloj en las cámaras de frente de algunos teléfonos (HTC)
  • NullPointerException en webview.java (android.webkit.WebView $ PrivateHandler.handleMessage)
  • Desactivar la cancelación de ruido de HTC
  • Android HttpClient OOM en 4G / LTE (HTC Thunderbolt)
  • El atributo maxlength de la entrada en html no funciona en HTC One M7
  • La cuenta no aparece en la configuración de la aplicación de contactos de HTC
  • ¿Por qué algunos móviles xhdpi no muestran la imagen ubicada en / res / drawable solamente?
  • 2 Solutions collect form web for “La devolución de llamada de autofocus de la cámara no ocurre”

    Las llamadas de enfoque automático no tienen un tiempo de espera. He encontrado algunos dispositivos en los que las llamadas de autofocus fallan esporádicamente al devolver la llamada (incluso en perfectas condiciones). Donde el mismo código funciona muy bien en otros dispositivos.

    Mi solución fue rodar mi propio mecanismo de tiempo de espera para autofoco. Lo hice con un futuro programado, pero la mejor implementación de tiempo de espera puede depender de su caso de uso específico.

     final ScheduledFuture<?> focusTimeoutFuture = mScheduledExecutorService.schedule(new Runnable() { @Override public void run() { takePictureAndCancelAutoFocus(); } }, 3, TimeUnit.SECONDS);// add a 3 second timeout to autofocus mCamera.autoFocus(new Camera.AutoFocusCallback() { @Override public void onAutoFocus(boolean b, Camera camera) { // cancel the timeout future if it didn't run already boolean canceledFuture = focusTimeoutFuture.cancel(false); if(canceledFuture) { takePictureAndCancelAutoFocus(); } } } 

    No es una solución a su problema específico, pero la pregunta en general es que podría llamar a autofocus antes de startpreview. En este caso tampoco se produce un autofoco cuando se activa la vista previa.

    De la documentación

    "Este método sólo es válido cuando la vista previa está activa (entre startPreview() y before stopPreview() )".

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.