我们在做Android开发的时候,有时候会用到振动和响铃的功能,特别是一些有关通信类的,在接受到消息的时候需要通过振动和响铃的方式去提醒用户,下面就简单介绍一下具体怎么操作的。
1、振动功能的实现
(1)首先我们需要加入振动的权限
<uses-permission android:name="android.permission.VIBRATE" />
(2)我们需要用到Vibrator类去实现振动功能,下面说一下需要用到的几个方法:
//检查硬件是否有振动器
boolean hasVibrator ()
//控制手机振动milliseconds毫秒
void vibrate (long milliseconds)
//控制手机以指定pattern模式振动。
void vibrate (long[] pattern, int repeat)
//关闭震动
void cancel ()
其中除了第三个方法以外,其他的几个方法都好理解,这里就不做解释了。下面来说一下第三个方法,需要传递两个参数:pattern和repeat
pattern:传递的是一个int类型的数组,它们是以毫秒为单位打开或关闭振动器的持续时间。第一个值表示在打开振动器之前要等待的毫秒数。下一个值表示在关闭振动器之前保持振动器的毫秒数。随后的值在以毫秒为单位的持续时间之间交替,以关闭振动器或打开振动器。
repeat:要使模式重复,请将索引传递到要在其中开始重复的模式数组,否则为-1以禁用重复。传入0是开头一直重复下去,传入2是从下标为2的地方开始重复振动。
(3)下面简单封装了一个工具类
public class VibrateUtil {
/**
* 让手机振动milliseconds毫秒
*/
public static void vibrate(Context context, long milliseconds) {
Vibrator vib = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE);
if(vib.hasVibrator()){ //判断手机硬件是否有振动器
vib.vibrate(milliseconds);
}
}
/**
* 让手机以我们自己设定的pattern[]模式振动
* long pattern[] = {1000, 20000, 10000, 10000, 30000};
*/
public static void vibrate(Context context, long[] pattern,int repeat){
Vibrator vib = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE);
if(vib.hasVibrator()){
vib.vibrate(pattern,repeat);
}
}
/**
* 取消震动
*/
public static void virateCancle(Context context){
//关闭震动
Vibrator vib = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE);
vib.cancel();
}
}
(4)开启和关闭振动
// 开启震动
isVirating = true;
VirateUtil.virate(context, new long[]{100, 200, 100, 200}, 0)
//关闭震动
if (isVirating) {//防止多次关闭抛出异常,这里加个参数判断一下
isVirating = false;
VirateUtil.virateCancle(context);
}
2、响铃功能的实现
(1)权限问题
Android设置响铃铃需要更改系统设置,所以在6.0以后提高了权限级别,需要使用 WRITE_SETTINGS 权限才能进行响铃铃设置。
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
记得针对6.0设备,进行动态获取权限。
(2)播放响铃我们需要用到MediaPlayer类去实现,下面说一下需要用到的几个方法:
//根据Uri设置音频,当然还有其他几个重载的方法来指定特定的音频。
void setDataSource (Context context , Uri uri)
//设置是否循环播放
void setLooping (boolean looping)
//让MediaPlayer真正去装载音频文件
void prepare ()
//开始或恢复播放
void start ()
//暂停播放,调用start()可以恢复播放
void pause ()
//停止播放
void stop ()
//是否正在播放
boolean isPlaying ()
//释放与此MediaPlayer关联的资源
void release ()
这里面几个方法都挺简单的,具体也没什么需要解释的。
(3)下面还是简单封装了一个工具类
public class MediaUtil {
private static MediaPlayer mMediaPlayer;
//开始播放
public static void playRing(Context context){
try {
//用于获取手机默认铃声的Uri
Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(context, alert);
//告诉mediaPlayer播放的是铃声流
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);
mMediaPlayer.setLooping(true);
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
//停止播放
public static void stopRing(){
if (mMediaPlayer!=null){
if (mMediaPlayer.isPlaying()){
mMediaPlayer.stop();
mMediaPlayer.release();
}
}
}
}
(4)开启和关闭响铃
//开启
MediaUtil.playRing(context);
//关闭
MediaUtil.stopRing();
3、总结
以上就是开发振动和响铃的一个简单的例子,希望对大家有所帮助。。。
网友评论