Android开发振动和响铃

我们在做Android开发的时候,有时候会用到振动和响铃的功能,特别是一些有关通信类的,在接受到消息的时候需要通过振动和响铃的方式去提醒用户,下面就简单介绍一下具体怎么操作的。

1、振动功能的实现

(1)首先我们需要加入振动的权限


(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 权限才能进行响铃铃设置。


记得针对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、总结

以上就是开发振动和响铃的一个简单的例子,希望对大家有所帮助。。。

你可能感兴趣的:(Android开发振动和响铃)