2010-10-07 23 views
7

Tôi đang cố gắng viết một ứng dụng yêu cầu đèn flash LED để chuyển sang chế độ đèn pin. Vấn đề là, Android 2.1 không hỗ trợ chế độ này và do đó tôi chưa thể hỗ trợ nền tảng này. Sẽ không phải là một vấn đề, nhưng tôi đang viết nó cho vị hôn phu của tôi và 4G Epic của cô ấy chỉ có 2.1 ngay bây giờ. Tôi tìm thấy một số mẫu mã sử dụng một số cuộc gọi API không có giấy tờ và do đó làm việc trên Motorola Droid và như vậy, nhưng chúng không hoạt động trên Epic. Có ai có một số gợi ý về nơi để tìm để tìm mã mà sẽ giúp tôi có được điều này làm việc?Camera.Parameters.FLASH_MODE_TORCH thay thế cho Android 2.1

Trả lời

9

Tôi nhận thấy rằng chế độ đèn pin thường hoạt động tốt trên phiên bản 2.1 nhưng tôi đã gặp phải vấn đề tương tự với Samsung Epic và đã tìm thấy một sự cố xung quanh nó.

Nhìn vào các tham số được trả về bởi Camera.getParameters() khi chạy trên Samsung Epic, tôi nhận thấy rằng chế độ flash mà nó yêu cầu hỗ trợ là: flash-mode-values ​​= off, on, auto;

chế độ đèn pin không được liệt kê, ngụ ý rằng nó không được hỗ trợ.

Tuy nhiên, tôi thấy rằng mô hình này vẫn chấp nhận chế độ đó và WOULD sẽ bật đèn LED! Tin xấu là khi sau đó thiết lập chế độ flash trở lại tự động hoặc tắt đèn LED vẫn sáng! Nó sẽ không tắt cho đến khi bạn gọi Camera.release().

Tôi đoán đó là lý do tại sao Samsung không đưa nó vào danh sách được hỗ trợ!?!

... Vì vậy, phương pháp tôi sử dụng để chuyển ngọn đuốc trong một CameraHelper lớp là ...

/*** 
* 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()); 
    } 
} 

Các hoạt động sử dụng này gọi nó là như sau ...

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

Các ma thuật mà làm cho công việc này trong releaseCameraResources() là nó gọi Camera.release() .... và sau đó tôi phải reinitialize tất cả các công cụ máy ảnh của tôi cho các thiết bị Samsung.

Không đẹp nhưng có vẻ đang hoạt động với nhiều người dùng.

Lưu ý rằng tôi có báo cáo về chế độ đèn pin không hoạt động chút nào với mã này trên Nexus nhưng đã có thể tìm hiểu nó. Nó chắc chắn hoạt động trên HTC EVO và Samsung Epic.

Hy vọng điều này sẽ hữu ích.

+0

Không chắc chắn nếu tôi đã làm điều gì sai, nhưng tôi nhận được một Force Close khi tôi cố gắng để gỡ lỗi nó. – smccloud

+2

Không có hành vi phạm tội, nhưng chức năng cơ bản trên điện thoại không phải là cách lý tưởng để đi. Ai biết được những chức năng nào của điện thoại SAMSUNG sẽ có từ nửa năm trở lên chẳng hạn? – ajacian81

+0

Tôi đã sử dụng mã của bạn. Nhưng đèn pin camera sẽ tự động tắt sau vài giây. Tôi đã thử nghiệm mã trong samsung galaxy ace 2.2.1 .. điều gì có thể là lý do cho điều đó? –

2

Trong trường hợp của tôi cho các thiết bị Samsung Tôi cần thiết để thiết lập chế độ tập trung đến vô cùng và nó bắt đầu làm việc

params.setFocusMode(Camera.Parameters.FOCUS_MODE_INFINITY); 
mCamera.setParameters(params); 
mCamera.startPreview(); 
+0

Cảm ơn rất nhiều cho các gợi ý :) Tôi đã có một vấn đề với đèn flash không hoạt động trên Galaxy S 5 với chế độ lấy nét "tự động", thiết lập nó để "vô cùng" đã làm các trick: p – Kervala

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