一、振动的实现
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();
}
}
}
}
---------------------

Android之手机振动和振铃的更多相关文章

  1. Android之手机向导以及设置中心模块的开发

    当我们使用的新的软件的时候,我们首先需要教用户如何使用我们的软件,当用户学习完使用教程,下次再登录的时候,我们应该直接跳到我们的功能界面,下面我来展示一下我学习视频做的效果图:手机防盗这个功能模块就是 ...

  2. Android使得手机拍照功能的发展(源共享)

    Android系统调用手机拍照功能有两种方法来直接调用手机自带摄像头还有一个就是要当心自己的节拍. 例Camera360 强大的一个在每个操作系统都有一个手机摄影软件:您可以捕捉不同风格,不同特效的照 ...

  3. Android 个人手机通讯录开发

    一.Android 个人手机通讯录开发 数据存储:SQLite 数据库 开发工具:Android Studio 二.Phone Module 简介 1. 界面展示                2. ...

  4. RomUtil【Android判断手机ROM,用于判断手机机型】

    参考资料 Android判断手机ROM 正文 有时候需要判断手机系统的ROM,检测ROM是MIUI.EMUI还是Flyme,可以使用getprop命令,去系统build.prop文件查找是否有对应属性 ...

  5. Android/IOS手机使用Fiddler抓包

    对于Android和IOS开发及测试的同事来说抓包是一个很重要的事,有利于排查问题所在,快速定位问题.但长期以来一直没有一款可以快速抓包的工具,直到有了Fiddler2. 使用步骤: 1.  Fidd ...

  6. Android 判定手机是否root

    Android获取手机root的状态 package com.app.demo; import java.io.File; import android.app.Activity; import an ...

  7. Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息

    Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息 本文目录: 获取手机信息 设置权限 申请权限 查询联系人 获取手机定位信息 调用高德地图,设置显示2个坐标点的位置,以及 ...

  8. 十问Android NFC手机上的卡模拟(转)

    1,  问:能否在AndroidNFC手机上实现卡模拟? 答:在技术上可行,但是,对一般开发人员来讲,目前看来仅仅是技术上可行:( 2,  问:具体如何实现呢? 答:有两种方式:一种是基于硬件的,被称 ...

  9. Android获取手机分辨率DisplayMetircs类

    关于Android中手机分辨率的使用 Android 可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局变形问题. 手机的分辨率信息是手机的 ...

随机推荐

  1. 李洪强经典面试题30-iOS应用性能调优的25个建议和技巧

    iOS应用性能调优的25个建议和技巧 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.mar ...

  2. HDU 5289 Assignment (二分+区间最值)

    [题目链接]click here~~ [题目大意]: 给出一个数列,问当中存在多少连续子序列,子序列的最大值-最小值<k [思路]:枚举数列左端点.然后二分枚举右端点,用ST算法求区间最值.(或 ...

  3. coffeescript遍历json对象

    直接给代码: headers = a:"this is a" ,b:"this is b" ,c:"this is c" exheaders ...

  4. strok函数用法【转】

    本文转载自:http://blog.csdn.net/hexiechina2010/article/details/25096763 char *strtok( char *strToken, con ...

  5. jeesite ckfinder mac/linux 文件上传路径设置

    背景: 如果你使用的是Mac 或者 Ubuntu 这种 Unix系统的话,你一定知道Unix系统的文件路径分隔符是 / 而Windows系统文件分隔符是 \ 当你设置了jeesite.properti ...

  6. Linux进程状态解析

    引言 Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态.  在下文将对进程的R.S.D.T.Z.X 六种状态做个说明. PROCE ...

  7. [Swift通天遁地]七、数据与安全-(11)如何检测应用程序中的内存泄露

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  8. SpringBoot 热部署 + IDEA

    1.使用Spring-Boot-Devtools实现热加载(这种方式会自动重启) devtools的原理: 深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类( ...

  9. OI——不后悔的两年

    NOI2014,悲惨的考跪,99+170+130 399 Cu滚粗.最终签到了复旦的一本,还算是有点结果吧.(其实我一开始就想读复旦我会说?)回首这两年,就像一场梦一样,从一无所知的小白到进入省队再到 ...

  10. EF--DBFirst

    EF框架有三种基本的方式:DB First,Model First,Code First.这里简单的说一下DB First,适合没有基础的同学照着做,学习基础的东西. DatabaseFirst就是围 ...