2014-05-08 14 views
11

Ho una fotocamera nell'app e voglio renderla automaticamente messa a fuoco in modo continuo come fa la fotocamera del telefono. Ho trovato le modalità FOCUS_MODE_CONTINUOUS_VIDEO e FOCUS_MODE_CONTINUOUS_PICTURE, ma non sono supportate da alcuni dei telefoni HTC Gingerbread su cui sto effettuando i test.La messa a fuoco automatica di Android quando le modalità di messa a fuoco automatica continua non sono supportate

Questo è quello che sto facendo per determinare se posso usare queste modalità:

 Camera.Parameters parameters = mCamera.getParameters(); 
     List<String> supportedFocusModes = parameters.getSupportedFocusModes(); 

     if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH && 
      supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) { 
      parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); 
     } 
     else if (supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) { 
      parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO); 
     } 
     else if (supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) { 
      // auto focus on request only 
      parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); 
     } 

esecuzione su diversi telefoni HTC Gingerbread, non ottengo i modi continui alla schiena, ma ottengo "auto ". Che mi consente di mettere a fuoco automaticamente su richiesta (quando chiamo mCamera.autoFocus(null), ma la fotocamera non si rimetterà a fuoco se l'utente sposta la fotocamera.

Non riesco a impostare la modalità di messa a fuoco su qualsiasi cosa che la fotocamera non supporta, se lo faccio mostra vuoto.

una soluzione che ho cercato è quello di chiamare mCamera.autoFocus(null) su un timer. Ma questo fa sì che la fotocamera di ridefinire continuamente, anche se è già a fuoco.

c'è un modo per implementare una messa a fuoco automatica continua esperienza su questi telefoni? Quando guardo l'app per fotocamera HTC su questi telefoni, ha una messa a fuoco automatica continua: mentre ti muovi, la fotocamera si concentra nuovamente e non mantiene la messa a fuoco una volta sola l'immagine è a fuoco.

+0

Dopo molte ore trascorse su questo, sto studiando la soluzione [qui] (http://stackoverflow.com/a/10555471/1481500) – kos

risposta

3

Avevamo l'obbligo di supportare una gamma molto ampia di telefoni. Quindi la mia soluzione alla fine è stata quella di gestire ogni caso in modo diverso.

Per lo scenario di telefoni senza supporto continuo di messa a fuoco automatica, ho implementato un'utilità per ascoltare l'accelerometro utilizzando SensorManager e attivare mCamera.autoFocus (...) ogni volta che l'utente sposta la fotocamera.

C'erano anche alcuni tablet più vecchi che supportavano solo la messa a fuoco fissa (chi userebbe una cosa del genere!), In quel caso l'immagine doveva essere scattata immediatamente - non sul callback del focus.

E per la maggior parte dei telefoni moderni, lo snippet di codice sopra era perfetto per utilizzare FOCUS_MODE_CONTINUOUS_PICTURE.

+0

Ciao [kos] (http://stackoverflow.com/ utenti/1481500/kos), sto avendo un caso d'uso simile da raggiungere. Potete fornire maggiori dettagli su questa vostra utilità? –

+0

@kos, potresti, per favore, spiegare come si definisce se un dispositivo supporta la funzionalità di messa a fuoco automatica continua? –

0

ho ottenuto un pb simile sul mio Samsung S4 ed ho risolto con:

camera.setParameters(parameters); 
    camera.autoFocus(null); 

Si tratta di suggerire nel documento Google here.

Per rendere effettivi i parametri della telecamera, l'applicazione deve chiamare setParameters(Camera.Parameters).

Problemi correlati