zoukankan      html  css  js  c++  java
  • Android之手机振动和振铃

    一、振动的实现
    1.使用振动所需的权限

    <uses-permission android:name="android.permission.VIBRATE" />
    2.相关API 

    //检查硬件是否有振动器
    boolean hasVibrator (http://www.my516.com)

    //控制手机制动milliseconds毫秒
    void vibrate (long milliseconds)

    //让手机以指定pattern模式震动。
    void vibrate (long[] pattern, int repeat)

    //关闭震动
    void cancel ()
     对于void vibrate (long[] pattern, int repeat)参数解释:

    pattern:传递一个int数组,它们是以毫秒为单位打开或关闭振动器的持续时间。第一个值表示在打开振动器之前要等待的毫秒数。下一个值表示在关闭振动器之前保持振动器的毫秒数。随后的值在以毫秒为单位的持续时间之间交替,以关闭振动器或打开振动器。

    repeat:要使模式重复,请将索引传递到要在其中开始重复的模式数组,否则为-1以禁用重复。传入0是开头一直重复下去,传入2是从下标为2的地方开始重复振动。

    3.VibrateUtil工具类代码:

    import android.app.Activity;
    import android.app.Service;
    import android.os.Vibrator;

    /**
    * Created by Zachary on 2018-04-16.
    */
    public class VibrateUtil {

    /**
    * 震动milliseconds毫秒
    */
    public static void vibrate(final Activity activity, long milliseconds) {
    Vibrator vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE);
    if(vib.hasVibrator()){ //判断手机硬件是否有振动器
    vib.vibrate(milliseconds);
    }
    }

    /**
    * 以pattern[]方式震动
    *
    * EG:long pattern[] = {100, 2000, 1000, 1000,3000};
    */
    public static void vibrate(final Activity activity, long[] pattern,int repeat){
    Vibrator vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE);
    if(vib.hasVibrator()){
    vib.vibrate(pattern,repeat);
    }
    }

    /**
    * 取消震动
    */
    public static void virateCancle(final Activity activity){
    //关闭震动
    Vibrator vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE);
    vib.cancel();
    }
    }
    4.注意: (防止多次关闭抛出异常)

    开启振动:

    // 开启震动
    isVirating = true;
    VibrateUtil.vibrate(XXXActivity.this, new long[]{100, 200, 100, 200}, 0)
    关闭振动:

    //关闭震动
    if (isVirating) {
    isVirating = false;
    VirateUtil.virateCancle(XXXActivity.this);
    }
    二、振铃的实现
    1.权限问题:

    Android设置振铃需要更改系统设置,所以在6.0以后提高了权限级别,需要使用 WRITE_SETTINGS 权限才能进行振铃设置。

    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    记得针对6.0设备,进行动态获取权限。

    2.相关API

    //根据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.MediaUtil工具类代码:

    import android.app.Activity;
    import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.media.RingtoneManager;
    import android.net.Uri;

    /**
    * Created by Zachary on 2019-04-16.
    */
    public class MediaUtil {

    private static MediaPlayer mMediaPlayer;

    //开始播放
    public static void playRing(final Activity activity){
    try {
    //用于获取手机默认铃声的Uri
    Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
    mMediaPlayer = new MediaPlayer();
    mMediaPlayer.setDataSource(activity, 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();
    }
    }
    }
    }
    --------------------- 

  • 相关阅读:
    第七章
    第五章
    第六章
    Git使用入门
    源代码的下载和编译
    向中国最牛的前端群-鬼群致敬
    Normalize.css做了哪些事情--看代码
    谷歌浏览器:书签被误删了怎么办
    2013/8月读书计划
    Limu:JavaScript的那些书
  • 原文地址:https://www.cnblogs.com/ly570/p/11007572.html
Copyright © 2011-2022 走看看