如果是做手机的可以在系统的某些服务上添加,例如incallUi应用上添加的,第三方应用可以通过添加监听电话状态广播实现。
private Boolean isFlash = false;
private float currentBatteryCount;//当前手机电量
private CameraManager manager;
//初始化值获取相机服务
manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
/*
*监听电话状态,可以放在监听的地方
*/
if(InCallState.INCOMING == newState){
if(Settings.System.getInt(mContext.getContentResolver(),FLASH_MODE, 1) == 1 &&
!isFlash && currentBatteryCount >= 15){//控制闪关灯开关,电量大于15%
isFlash = true;
new Thread(new Runnable() {//在新的线程中启动闪烁功能
@Override
public void run() {
while (isFlash) {//循环开关闪关灯
startFlash();
}
}
}).start();
}else{
isFlash = false;
}else{
isFlash = false;
}
public void startFlash(){
//判断是否有相机权限
if (ContextCompat.checkSelfPermission(mContext, permission.CAMERA)
== PackageManager.PERMISSION_GRANTED) {
open();//开启闪关灯
try {
Thread.sleep(500);//持续开启闪关灯时间500毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
close();//关闭闪关灯
try {
Thread.sleep(500);//关闭闪关灯后等待500毫秒再循环打开
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
Log.d("TAG","startFlash need request camera permission ");
}
}
/**
*open flash
* @return
*/
private void open() {
try {
manager.setTorchMode("0", true);
android.util.Log.d("TAG","open flash");
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
/**
* close flash
* @return
*/
private void close() {
try {
manager.setTorchMode("0", false);//关闭闪关灯
android.util.Log.d("TAG","proximitysensor open flash");
} catch (CameraAccessException e) {
e.printStackTrace();
}
}