本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
Android之手机振动和振铃
吴振华 · 440浏览 · 发布于2019-05-29 +关注

作为APP开发,用户交互中除了显示的效果展示,最强有力提醒用户操作莫过于振动和音效了。今天开始这方面的总结,准备比较规范且完善的记录这方面的内容。


一、振动的实现

1.使用振动所需的权限

<uses-permission android:name="android.permission.VIBRATE" />


2.相关API 

//检查硬件是否有振动器
boolean hasVibrator ()
 
//控制手机制动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;
VirateUtil.virate(XXXActivity.this, new long[]{100, 200, 100, 200}, 0)
关闭振动:
//关闭震动
if (isVirating) {
    isVirating = false;
    VirateUtil.virateCancle(XXXActivity.this);
}


二、振铃的实现

1.权限问题:

Android设置振铃需要更改系统设置,所以在6.0以后提高了权限级别,需要使用 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();
            }
        }
    }
}

4.官网状态图:

3.png


相关推荐

android下vulkan与opengles纹理互通

talkchan · 1179浏览 · 2020-11-23 10:37:39
Android 使用RecyclerView实现轮播图

奔跑的男人 · 2175浏览 · 2019-05-09 17:11:13
微软发布新命令行工具 Windows Terminal

吴振华 · 869浏览 · 2019-05-09 17:15:04
Facebook 停止屏蔽部分区块链广告

· 754浏览 · 2019-05-09 17:20:08
加载中

0评论

评论
坐标是江苏.南京,行业是互联网,技术是PHP和java,还有熟悉前后端等。
分类专栏
小鸟云服务器
扫码进入手机网页