我有这个代码在android中打开和关闭相机闪光灯:
params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
isFlashOn = true;
如果闪光灯亮起且用户关闭屏幕,则会出现问题。闪光灯自动关闭,并在屏幕开启时返回。
屏幕关闭时我需要保持闪光灯。
请问好吗?
答案 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,因为他们的答案在此引用。