Sto provando a scrivere un'app che richiede che il flash LED entri in modalità torcia. Il problema è che Android 2.1 non supporta questa modalità e quindi non posso ancora supportare la piattaforma. Non sarebbe un problema, ma lo sto scrivendo per il mio fidanzato e la sua Epic 4G ha solo 2.1 in questo momento. Ho trovato alcuni esempi di codice che utilizzano alcune chiamate API non documentate e quindi funzionano su Motorola Droid e simili, ma non funzionano su Epic. Qualcuno ha qualche suggerimento su dove cercare il codice che dovrebbe aiutarmi a farlo funzionare?Sostituzione di Camera.Parameters.FLASH_MODE_TORCH per Android 2.1
risposta
Sto trovando che la modalità torcia generalmente funziona bene su 2.1 ma ho avuto lo stesso problema con il Samsung Epic e ho trovato un trucco attorno ad esso.
Osservando i parametri restituiti da Camera.getParameters() durante l'esecuzione su Samsung Epic, ho notato che le modalità flash che afferma di supportare sono: flash-mode-values = off, on, auto;
torch-mode non è elencato, il che implica che non è supportato.
Tuttavia, ho trovato che questo modello accetterebbe ancora quella modalità e che accenderebbe il LED! La cattiva notizia era che quando in seguito si riportava la modalità flash su auto o off left il LED si accendeva ancora! Non si spegnerà finché non chiami Camera.release().
Immagino sia per questo che Samsung non lo includa nell'elenco dei supportati!?!
Quindi ... il metodo che uso per attivare la torcia in un CameraHelper classe è ...
/***
* Attempts to set camera flash torch/flashlight mode on/off
* @param isOn true = on, false = off
* @return boolean whether or not we were able to set it
*/
public boolean setFlashlight(boolean isOn)
{
if (mCamera == null)
{
return false;
}
Camera.Parameters params = mCamera.getParameters();
String value;
if (isOn) // we are being ask to turn it on
{
value = Camera.Parameters.FLASH_MODE_TORCH;
}
else // we are being asked to turn it off
{
value = Camera.Parameters.FLASH_MODE_AUTO;
}
try{
params.setFlashMode(value);
mCamera.setParameters(params);
String nowMode = mCamera.getParameters().getFlashMode();
if (isOn && nowMode.equals(Camera.Parameters.FLASH_MODE_TORCH))
{
return true;
}
if (! isOn && nowMode.equals(Camera.Parameters.FLASH_MODE_AUTO))
{
return true;
}
return false;
}
catch (Exception ex)
{
MyLog.e(mLOG_TAG, this.getClass().getSimpleName() + " error setting flash mode to: "+ value + " " + ex.toString());
}
}
Le attività che utilizzare questa chiamata come segue ...
private void toggleFlashLight()
{
mIsFlashlightOn = ! mIsFlashlightOn;
/**
* hack to fix an issue where the Samsung Galaxy will turn torch on,
* even though it says it doesnt support torch mode,
* but then will NOT turn it off via this param.
*/
if (! mIsFlashlightOn && Build.MANUFACTURER.equalsIgnoreCase("Samsung"))
{
this.releaseCameraResources();
this.initCamera();
}
else
{
boolean result = mCamHelper.setFlashlight(mIsFlashlightOn);
if (! result)
{
alertFlashlightNotSupported();
}
}
}
Il la magia che rende questo lavoro in releaseCameraResources() è che chiama Camera.release() .... e quindi devo reinizializzare tutte le mie cose fotografiche per i dispositivi Samsung.
Non carino ma sembra funzionare per molti utenti.
Nota che ho un rapporto della modalità torcia che non funziona affatto con questo codice su Nexus uno, ma sono stato in grado di scavare in esso. Funziona sicuramente su HTC EVO e Samsung Epic.
Spero che questo aiuti.
Nel mio caso per i dispositivi Samsung avevo bisogno di impostare la modalità di messa a fuoco all'infinito e ha iniziato a lavorare
params.setFocusMode(Camera.Parameters.FOCUS_MODE_INFINITY);
mCamera.setParameters(params);
mCamera.startPreview();
Grazie mille per il suggerimento :) Ho avuto un problema con il flash non funziona su un Galaxy S 5 con la modalità di messa a fuoco "auto", impostandolo su "infinito" ha fatto il trucco: p – Kervala
Non so se ho fatto qualcosa di sbagliato, ma io sto ottenendo una Forza chiudere quando cerco di eseguire il debug esso. – smccloud
Senza offesa, ma la funzionalità di base sul produttore del telefono non è il modo ideale per andare. Chissà che funzionalità avranno i telefoni SAMSUNG in mezzo anno o più, ad esempio? – ajacian81
Ho usato il tuo codice. Ma la torcia della fotocamera si spegne automaticamente dopo pochi secondi. Ho provato il codice in samsung galaxy ace 2.2.1 .. quale può essere la ragione? –