屏幕关闭时保持相机闪光灯亮起

时间:2014-06-09 17:06:13

标签: android

我有这个代码在android中打开和关闭相机闪光灯:

 params = camera.getParameters();
 params.setFlashMode(Parameters.FLASH_MODE_TORCH);
 camera.setParameters(params);
 camera.startPreview();
 isFlashOn = true;

如果闪光灯亮起且用户关闭屏幕,则会出现问题。闪光灯自动关闭,并在屏幕开启时返回。

屏幕关闭时我需要保持闪光灯。

请问好吗?

1 个答案:

答案 0 :(得分:0)

以下是您遇到问题的link。 “关键是将状态更改回FLASH_MODE_OFF,然后再返回FLASH_MODE_TORCH。”

在解决方案中,他创建了一个Timer Task来处理屏幕是否打开。然后他关掉闪光灯,然后重新开启。

在链接解决方案下方是另一个solution,它添加了thread并使其在发送torch命令之前进入休眠状态200毫秒。

所以我说你正在寻找的解决方案是两种解决方案的结合。

@Override
public void onCreate() {
    // assume we start with screen on and save that state ;-)
    this.pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    screenOn = this.pm.isScreenOn();

    // program a timer which checks if the light needs to be re-activated
    this.mTimer = new Timer();
    this.mTimerTask = new TimerTask() {
        public void run() {
            // re-activate the LED if screen turned off
            if(!pm.isScreenOn() && pm.isScreenOn() != screenOn) {
                Log.i("SleepLEDservice", "re-activated the LED");
                // really it's NOT ENOUGH to just "turn it on", i double-checked this
                setFlashlight(Camera.Parameters.FLASH_MODE_OFF);
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                setFlashlight(Camera.Parameters.FLASH_MODE_TORCH);
            }
            screenOn = pm.isScreenOn();                 
        }
    };
}

private void setFlashlight(String newMode) {
    try {
        this.frontCamPara = this.frontCam.getParameters();
        if(this.frontCamPara.getFlashMode() != newMode) {
            this.frontCamPara.setFlashMode(newMode);
            this.frontCam.setParameters(frontCamPara);  
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

同样,应该归功于@stefanjunker和@BlueJam,因为他们的答案在此引用。