其实很简单, 只需要通过handle传递数据,以及Timer定时器控制闪光灯开关即可完成。
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
lightOn();
break;
case 0:
lightOff();
break;
}
}
};
private void SOS() {
mTimerTask = new TimerTask() {
@Override
public void run() {
Message message = new Message();
mInt = mInt == 0 ? 1 : 0;
message.what = mInt;
handler.sendMessage(message);
}
};
mTimer = new Timer();
mTimer.schedule(mTimerTask, 0, 500);
}
下面是控制闪光灯开关的方法:
private void lightOn() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
try {
manager.setTorchMode("0", true);
} catch (Exception e) {
e.printStackTrace();
}
} else {
final PackageManager pm = getPackageManager();
final FeatureInfo[] features = pm.getSystemAvailableFeatures();
for (final FeatureInfo f : features) {
if (PackageManager.FEATURE_CAMERA_FLASH.equals(f.name)) { // 判断设备是否支持闪光灯
if (null == mCamera) {
mCamera = Camera.open();
}
final Camera.Parameters parameters = mCamera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(parameters);
mCamera.startPreview();
}
}
}
}
private void lightOff() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
try {
manager.setTorchMode("0", false);
} catch (Exception e) {
e.printStackTrace();
}
} else {
if (mCamera != null) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
}