Ho un problema riguardante la fotocamera nella build Marshmallow più recente, in particolare la torcia. su qualsiasi versione pre-Marshmallow tutto quello che devo fare per attivare il flash on/off è stato il seguente:Controllo torcia in Marshmallow
private void turnFlashOn(final Camera camera, int flashLightDurationMs) {
if (!isFlashOn()) {
final List<String> supportedFlashModes = camera.getParameters().getSupportedFlashModes();
if (supportedFlashModes != null && supportedFlashModes.contains(Camera.Parameters.FLASH_MODE_TORCH)) {
mParams.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(mParams);
}
}
}
e
private void turnFlashOff(Camera camera) {
if (camera != null) {
final List<String> supportedFlashModes = camera.getParameters().getSupportedFlashModes();
if (supportedFlashModes != null && supportedFlashModes.contains(Camera.Parameters.FLASH_MODE_OFF)) {
mParams.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(mParams);
}
}
}
Purtroppo, dispositivi Marshmallow ha cominciato a bloccarsi in natura. In qualche modo camera.getParameters()
e camera.setParameters()
cominciarono a fallire con messaggi come:
RuntimeException: getParameters fallito (parametri vuoto)
RuntimeException: setParameters fallito
ho provato avviare e arrestare l'anteprima prima di ottenere il parametri, che non generano più errori. Tuttavia l'anteprima non viene ripresa quando chiamo camera.startPreview()
.
Temo di rilasciare la fotocamera e riaprirla è fuori questione in quanto ciò richiede alcuni secondi e produrrebbe una brutta esperienza.
Qualche suggerimento su come accendere/spegnere la torcia in Marshmallow in modo affidabile?
ho già il permesso fotocamera. Non ho il targeting 23, quindi non ho ancora bisogno di verificare le autorizzazioni di runtime, giusto? –
Sì e no. Se non hai scelto come target 23, l'autorizzazione dovrebbe essere già stata concessa. Tuttavia, l'utente può disattivare questa autorizzazione dopo l'installazione. In tal caso, è necessario verificare (se in esecuzione su un dispositivo API 23) se si dispone dell'autorizzazione o meno. Se non lo fai perché l'utente l'ha rifiutato, le API della fotocamera potrebbero restituire dati vuoti o nulli. Questo talk fornirà maggiori dettagli sulle modifiche ai permessi per Marshmallow: https://youtu.be/WGz-alwVh8A?list=PLnVy79PaFHMUqqvwbjyKJZv1N8rzHOCBi –
Hai ragione, è proprio così. Tuttavia, l'app si arresta in modo anomalo anche con autorizzazioni concesse, quindi sembra che qualcosa di correlato all'API di Camera sia cambiato e si comporta in modo diverso rispetto a Lollipop o Kitkat. –