好久没有写记录了,最近一个项目要求后台推送一条任务,前端需要有相应的提示响应,最好是有闪光灯、震动并且加铃声。一直没有做过,然后再很多大神博客左看看右看看,然后总结了一下并生成一个工具类,不足之处请指教!废话不多说,直接上代码!
本文是6.0及以上
一、权限声明
<uses-permission android:name="android.permission.VIBRATE" /> <!-- 震动权限 -->
<uses-permission android:name="android.permission.CAMERA" /> <!-- 摄像头权限 -->
<uses-permission android:name="android.permission.FLASHLIGHT" /> <!-- 摄像头权限 -->
二、闪光灯开启和关闭
/*** 打开闪光灯 */
private void open() {
if (isLOLLIPOP()) {
try {
manager.setTorchMode("0", true);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
}
/*** 关闭闪光灯 */
public void close() {
if (isLOLLIPOP()) {
try {
manager.setTorchMode("0", false);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
}
/**
* 判断Android系统版本是否 >= LOLLIPOP(API21)
*
* @return boolean
*/
private boolean isLOLLIPOP() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return true;
} else {
return false;
}
}
manager.setTorchMode("0", true);
第一个参数“0”表示后置摄像头,1表示前置。
第二个参数“true”表示打开
三、震动提示开启和关闭
/**
* 开始震动
*/
public void playVibrate() {
vibrator = (Vibrator) mContext.getSystemService(Service.VIBRATOR_SERVICE);
// 暂停500毫秒,振动0.3秒,暂停150毫秒,振动300秒(可自行调节震幅)
long[] vibrationPattern = new long[]{500, 300, 150, 300};
// 第一个参数为开关开关的时间,第二个参数是重复次数,振动需要添加权限
vibrator.vibrate(vibrationPattern, 0);//-1表示震动一次,0表示重复震动
}
/**
* 关闭震动
*/
public void closeVibrate() {
vibrator.cancel();
}
四、声音提示开启和关闭
/**
* 播放通知声音
*/
public void playRingTone() {
Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
ringtone = RingtoneManager.getRingtone(mContext, uri);
ringtone.play();
}
/**
* 关闭通知声音
*/
private void closeRingTone() {
ringtone.stop();
}
RingtoneManager是一个铃声管理器结合Ringtone来使用(可百度了解):
管理来电铃声(TYPE_RINGTONE)、提示音(TYPE_NOTIFICATION)、闹钟铃声(TYPE_ALARM)等。
五、闪光灯不停闪光
private void hanler() {
runnable = new Runnable() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void run() {
open();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
close();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
mHandler.postDelayed(this, 200);
//这里可以控制提示状态的执行次数
}
};
}
以上这些直接用就可以了,但是有一个细节需要注意:
每次在调用闪光灯方法的时候,切记每次调用都要重新初始化,否则会报错,错误意思大概就是已有打开摄像头的异常需要释放
目前就这样了,可以直接使用,如果需要资源到这里下载已封装好的Util类
END