2012-01-16 31 views
25

Rất nhiều câu hỏi API đèn pin LED cho Android. Tôi e ngại hỏi nhau, nhưng ở đây đi ..Đèn pin LED trên Galaxy Nexus có thể điều khiển được bằng API nào?

Sử dụng FLASH_MODE_TORCH đã thử và thực sự Tôi có thể đạt được sự hài lòng với Samsung Galaxy SII và bật đèn flash LED. Trên Galaxy Nexus của bạn tôi, không may mắn như vậy. Cũng không phải trên Droid X. của người bạn khác của tôi X.

Tôi nhận thấy số lượng thiết bị IOCTL gốc cụ thể không đáng kể. Đây có phải là trường hợp của Galaxy Nexus không? Làm thế nào để tôi tìm thấy một tham chiếu đến chương trình đó?

Tôi đang thực hiện chuỗi tiêu chuẩn FLASH_MODE_TORCH/"flash-mode" = "torch", startPreview().

Loại đáng thất vọng vì dường như API tiêu chuẩn này dường như không phổ biến sau tất cả.

Trả lời

44

Điều tôi phát hiện ra là một số thiết bị cần SurfaceView để bật đèn LED.

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(); 

hoạt động của bạn cần phải thực hiện SurfaceHolder.Callback:

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; 
} 

Các surfaceview có để được nhìn thấy, android:visibility="invisible" hoặc một chiều cao và chiều rộng từ 0 sẽ không hoạt động. Thật không may tôi đã không tìm thấy một giải pháp tốt để ẩn nó, vì vậy tôi chỉ cần cho nó một kích thước 1x1dip và vị trí nó bên dưới một nút ..

** (Để mở rộng trên đoạn trên [Không có đủ đại diện để trả lời, nhưng cảm thấy đó là hữu ích]) một nơi nào đó trong XML của Xem nội dung hiện tại của bạn, bạn muốn:

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

Nếu bạn có nó bên trong một RelativeLayout (ưu tiên), bạn cũng có thể làm alignParentLeft/dưới để gài nó ở một góc. Phương pháp này làm việc cho Galaxy Nexus của tôi, nhưng đó là một vấn đề được biết đến (phía điện thoại) cho Droid X (với bản cập nhật .621, dù sao), và không hoạt động trên máy của tôi. Câu trả lời tuyệt vời, timosch!

+0

Tôi sẽ chụp ảnh này. Thanks-- – Malachi

+0

tính năng này có hoạt động không? cho bât ki ai? –

+0

đã làm việc này? – Ivan

Các vấn đề liên quan