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();
}
}
}
}
---------------------
Android之手机振动和振铃的更多相关文章
- Android之手机向导以及设置中心模块的开发
当我们使用的新的软件的时候,我们首先需要教用户如何使用我们的软件,当用户学习完使用教程,下次再登录的时候,我们应该直接跳到我们的功能界面,下面我来展示一下我学习视频做的效果图:手机防盗这个功能模块就是 ...
- Android使得手机拍照功能的发展(源共享)
Android系统调用手机拍照功能有两种方法来直接调用手机自带摄像头还有一个就是要当心自己的节拍. 例Camera360 强大的一个在每个操作系统都有一个手机摄影软件:您可以捕捉不同风格,不同特效的照 ...
- Android 个人手机通讯录开发
一.Android 个人手机通讯录开发 数据存储:SQLite 数据库 开发工具:Android Studio 二.Phone Module 简介 1. 界面展示 2. ...
- RomUtil【Android判断手机ROM,用于判断手机机型】
参考资料 Android判断手机ROM 正文 有时候需要判断手机系统的ROM,检测ROM是MIUI.EMUI还是Flyme,可以使用getprop命令,去系统build.prop文件查找是否有对应属性 ...
- Android/IOS手机使用Fiddler抓包
对于Android和IOS开发及测试的同事来说抓包是一个很重要的事,有利于排查问题所在,快速定位问题.但长期以来一直没有一款可以快速抓包的工具,直到有了Fiddler2. 使用步骤: 1. Fidd ...
- Android 判定手机是否root
Android获取手机root的状态 package com.app.demo; import java.io.File; import android.app.Activity; import an ...
- Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息
Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息 本文目录: 获取手机信息 设置权限 申请权限 查询联系人 获取手机定位信息 调用高德地图,设置显示2个坐标点的位置,以及 ...
- 十问Android NFC手机上的卡模拟(转)
1, 问:能否在AndroidNFC手机上实现卡模拟? 答:在技术上可行,但是,对一般开发人员来讲,目前看来仅仅是技术上可行:( 2, 问:具体如何实现呢? 答:有两种方式:一种是基于硬件的,被称 ...
- Android获取手机分辨率DisplayMetircs类
关于Android中手机分辨率的使用 Android 可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局变形问题. 手机的分辨率信息是手机的 ...
随机推荐
- 战术网络安全检查表 | Symantec Connect
"知己知彼,百战不殆: 不知彼而知己,一胜一负: 不知彼,不知己,每战必殆." 孙子(中国古代军事家). 孙子的话在今日仍能够使我们产生共鸣. 机构只有了解敌人和自己优缺点才能在持 ...
- ubuntu tweak Install
ubuntu tweak 1:增加PPA源 sudo add-apt-repository ppa:tualatrix/ppa 2:編輯源列表sudo gedit /etc/apt/sources.l ...
- ZOJ 3827 Information Entropy(数学题 牡丹江现场赛)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=5381 Information Theory is one of t ...
- leetcode_Product of Array Except Self
描写叙述: Given an array of n integers where n > 1, nums, return an array output such that output[i] ...
- 线段树专题 POJ3468 A Simple Problem with Integers
题意:n个点.m个操作.两种操作类型.C X Y K 表示区间[x,y]上每一个点值加k.Q X Y 求区间[x,y]的和 分析:线段树区间求和,裸模板 注意:结果会超int,要用long long ...
- [Java] 实验6參考代码
1. 大家的.java程序都须要在一个"缺省包"(default package)下编写\执行\提交,不要去命名新的package - 系统不支持package contr ...
- POJ 2367:Genealogical tree(拓扑排序)
Genealogical tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2738 Accepted: 1838 Spe ...
- LeetCode 977. Squares of a Sorted Array (有序数组的平方)
题目标签:Array 题目给了我们一组 从小到大的 integers,让我们平方数字 并且 也排序成 从小到达. 因为有负数在里面,平方后,负数在array的位置会变动. 可以设left 和 righ ...
- Spring自我总结
1.InitializingBean Spring设置完一个bean的合作者后,会检查bean是否实现InitializingBean接口,实现的话会调用afterPropertiesSet(Init ...
- POJ2393 Yogurt factory 【贪心】
Yogurt factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6821 Accepted: 3488 De ...