2012-01-16 21 views
25

Android için pek çok LED el feneri API'si soruları. Başka bir soru sormaktan korkuyorum, ama işte burada ..Galaxy Nexus üzerinde LED el feneri hangi API tarafından kontrol edilebilir?

Denenmiş ve doğru FLASH_MODE_TORCH'u kullanma Samsung Galaxy SII cihazımdan memnuniyetimi yakalayabiliyorum ve LED flaşı açılabiliyorum. Arkadaşımın Galaxy Nexus'unda böyle bir şans yok. Ayrıca diğer arkadaşımın Droid X.

Önemli olmayan sayıda aygıt için yerel yerel IOCTL çağrılarının gerektiği gibi görünmüyorum. Galaxy Nexus için durum böyle mi? Programlamak için nasıl bir referans bulabilirim?

Standart FLASH_MODE_TORCH/"flaş modu" = "meşale", startPreview() zincirini yapıyorum.

Bu görünüşte standart API'nin, her şeyden önce o kadar evrensel görünmediği hayal kırıklığı yaratıyor.

cevap

44

Bulduğum şey, bazı aygıtların LED'i açmak için SurfaceView'a ihtiyaç duyduklarıdır.

SurfaceView preview = (SurfaceView) findViewById(R.id.PREVIEW); 
SurfaceHolder mHolder = preview.getHolder(); 
mHolder.addCallback(this); 
Camera mCamera = Camera.open(); 
mCamera.setPreviewDisplay(mHolder); 

// Turn on LED 
Parameters params = mCamera.getParameters(); 
params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
mCamera.setParameters(params);  
mCamera.startPreview(); 

... 

// Turn off LED 
Parameters params = mCamera.getParameters(); 
params.setFlashMode(Parameters.FLASH_MODE_OFF); 
mCamera.setParameters(params); 
mCamera.stopPreview(); 
mCamera.release(); 

Kişisel aktivitesi SurfaceHolder.Callback uygulamak gerekir:

public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) {} 

public void surfaceCreated(SurfaceHolder holder) { 
    mHolder = holder; 
    mCamera.setPreviewDisplay(mHolder); 
} 

public void surfaceDestroyed(SurfaceHolder holder) { 
    mCamera.stopPreview(); 
    mHolder = null; 
} 

SurfaceView android:visibility="invisible" veya 0 bir yükseklik ve genişlik çalışmaz, görünür olması gerekir. Ne yazık ki, onu gizlemek için iyi bir çözüm bulamadım, bu yüzden sadece 1x1dip bir boyut verdi ve bir düğmenin altında konumlandırıldı ..

** (Yukarıdaki paragrafta genişletmek için [Yeterli temsilcisi yok) mevcut İçerik View XML Somewhere) cevap, ancak] yararlı olduğunu hissettim, istediğiniz:

<SurfaceView 
    android:id="@+id/PREVIEW" 
    android:layout_width="1dip" 
    android:layout_height="1dip"/> 

bir RelativeLayout (tercih içimde varsa), ayrıca sokmak alignParentLeft/Bottom yapabilirsiniz bir köşede. Bu yöntem benim Galaxy Nexus için çalışıyor, ancak Droid X için bilinen bir sorun (telefon tarafı) (yine de .621 güncelleştirmesiyle birlikte) ve benimki üzerinde çalışmıyor. Harika cevap, timosch!

+0

Bunu bir şans vereceğim. Teşekkürler-- – Malachi

+0

bu işe yaradı mı? herkes için? –

+0

bu işe yaradı mı? – Ivan

İlgili konular