2012-02-29 18 views
8

Ho il seguente problema: L'app My Flashlight funziona perfettamente sul mio Samsung Galaxy S2 ma sfortunatamente non sul Samsung Galaxy Nexus (problema: la torcia ignora il clic del pulsante -> nessuna reazione, nessuna luce, nessun incidente, nessuna eccezione). Ho letto "Torcia a LED su Galaxy Nexus controllabile da quale API?" qui in StackOverflow ma non mi ha aiutato poiché il mio problema si verifica ancora. Questo è il mio codice-frammento di controllare la luce:LED Flashlight non funziona su Samsung Galaxy Nexus

final Button FlashLightControl = (Button)findViewById(R.id.ledbutton); 
FlashLightControl.setOnClickListener(new Button.OnClickListener() 
{ 
     public void onClick(View arg) 
     { 
      if(camera != null) 
      { 
       //in case light is on we will turn it off 
       parameters = camera.getParameters(); 
       parameters.setFlashMode(Parameters.FLASH_MODE_OFF); 
       camera.setParameters(parameters); 
       camera.stopPreview(); 
       camera.release(); 
       camera = null; 
      } 
      else 
      { 
       // light is off - we turn it on 
       camera = Camera.open(); 
       parameters = camera.getParameters(); 
       parameters.setFlashMode(Parameters.FLASH_MODE_TORCH); 
       camera.setParameters(parameters); 
       camera.startPreview(); 
      } 
     }}); 

Tutte le idee? Per ragioni di completezza - questi sono i permessi che ho aggiunto al AndroidManifest.xml:

<uses-feature android:name="android.hardware.camera.flash" /> 
<uses-sdk android:minSdkVersion="7" /> 
<uses-permission android:name="android.permission.CAMERA"/> 
<uses-permission android:name="android.permission.WAKE_LOCK"/> 

qualcuno può aiutarmi?

saluti, CarpeTemporem

+0

Vorrei saperlo anche io –

risposta

3

Ho avuto lo stesso problema e risolto tramite usando Surface View avente larghezza 1px ed altezza 1px

+0

Grazie! Ora funziona :) –

+4

cosa significa da 1px/1px superficie vista –

+0

@LastWarrior Surface View con 1px height e 1px width posizionati da qualche parte e chiamando i callbacks della vista superficiale –

16

Ho anche avuto lo stesso problema, ma stavo cercando di accendere la LED da un servizio, quindi non ho potuto utilizzare un SurfaceView 1x1. Ecco cosa ho fatto per farlo funzionare.

private void turnLEDOn() throws IOException 
{ 
    // In order to work, the camera needs a surface to turn on. 
    // Here I pass it a dummy Surface Texture to make it happy. 
    camera = Camera.open(); 
    camera.setPreviewTexture(new SurfaceTexture(0)); 
    camera.startPreview(); 
    Parameters p = camera.getParameters(); 
    p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
    camera.setParameters(p); 
} 

private void turnLEDOff() 
{ 
    if (camera != null) 
    { 
     // Stopping the camera is enough to turn off the LED 
     camera.stopPreview(); 
     camera.release(); 
     camera = null; 
    } else 
     throw new NullPointerException("Camera doesn't exist to turn off."); 

} 

SurfaceTexture è stata aggiunta nel livello di API 11 (Android 3.0) in modo da funzionare solo su Honeycomb o più recente. Per i livelli API più vecchi, puoi utilizzare il trucco SurfaceView nell'altra risposta.

+1

'new SurfaceTexture (0)' ha funzionato per me sul mio Nexus 5 con sistema operativo Android 5.1, grazie! – shkschneider

Problemi correlati