一、振动的实现
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. POJ--3164--Command Network【朱刘算法】最小树形图

    链接:http://poj.org/problem?id=3164 题意:告诉n个点坐标,m条边表示两个点之间有路.从1点開始建立一个有向图最小生成树. 朱刘算法模板题 =============== ...

  2. BZOJ 1798: [Ahoi2009]Seq 维护序列seq (线段树乘法加法的混合操作)

     题目:点击打开链接 大意:一个数组.三个操作.第一种是区间[a,b]每一个数乘乘,另外一种是区间[a,b]每一个数加c,第三种是查询[a,b]区间的和并对p取摸. 两种操作就不能简单的仅仅往下传 ...

  3. 虚拟化(二):虚拟化及vmware workstation产品使用

    虚拟化(一):虚拟化及vmware产品介绍 vmware workstation的最新版本号是10.0.2. 相信大家也都使用过,当中的简单的虚拟机的创建.删除等,都非常easy.这里就不再具体说明了 ...

  4. 小胖说事31------iOS 真机编译错误&quot;“XXX”的 iPod&quot; and run &quot;XXX&quot; again, or if &quot;XXX&quot; is still running

    在真机上測试时用一会就出现例如以下信息,且应用挂掉. Restore the connection to ""XXX"的 iPod" and run " ...

  5. BestCoder Round #60/HDU 5505 暴力数学

    GT and numbers 问题描述 给出两个数NN和MM. NN每次可以乘上一个自己的因数变成新的NN. 求最初的NN到MM至少需要几步. 如果永远也到不了输出-1−1. 输入描述 第一行读入一个 ...

  6. VCL源码修改立即生效

    为了深刻学习Delphi的VCL源码,要使的它立刻修改生效.网上很多办法,这招最简单最管用: 把source\vcl路径添加进来,只要有修改vcl源程序,都会重新编译.但是对RTL源码不能这样做. - ...

  7. nyoj448 寻找最大数

    寻找最大数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大. 比方当n=920813467185 ...

  8. luogu2744 量取牛奶

    题目大意 给出一个整数集合$A$,总数$N$,规定一个整数序列$\{a_n\}, \forall i, a_i\in A$满足条件:存在一个正整数序列$\{k_n\}$,使得$\sum_{i=1}^n ...

  9. new (C# Reference)

    https://msdn.microsoft.com/en-us/library/51y09td4.aspx In C#, the new keyword can be used as an oper ...

  10. Counterfeit Dollar

    http://poj.org/problem?id=1013 #include<stdio.h> #include<string.h> #include<math.h&g ...