美文网首页
Android开发振动和响铃

Android开发振动和响铃

作者: 码农来搬砖 | 来源:发表于2019-05-30 10:23 被阅读0次

    我们在做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、总结

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

    相关文章

      网友评论

          本文标题:Android开发振动和响铃

          本文链接:https://www.haomeiwen.com/subject/eefmtctx.html