Android编程实现震动与振铃的方法详解
本文实例讲述了Android编程实现震动与振铃的方法。分享给大家供大家参考,具体如下:
1、Android的震动实现——Vibrator类
(1)实现震动,首先要加上使用震动所需的权限
<uses-permission android:name="android.permission.VIBRATE" />
注:更多关于Android权限控制说明可参考http://tools.jb51.net/table/AndroidManifest
(2)需要用到的API
boolean hasVibrator ()//检查硬件是否有振动器 void vibrate (long milliseconds)//控制手机制动milliseconds毫秒 void vibrate (long[] pattern, int repeat)//让手机以指定pattern模式震动。 void cancel ()//关闭震动
其中方法三void vibrate (long[] pattern, int repeat)
官方翻译是:传递一个int数组,它们是以毫秒为单位打开或关闭振动器的持续时间。第一个值表示在打开振动器之前要等待的毫秒数。下一个值表示在关闭振动器之前保持振动器的毫秒数。随后的值在以毫秒为单位的持续时间之间交替,以关闭振动器或打开振动器。要使模式重复,请将索引传递到要在其中开始重复的模式数组,否则为-1以禁用重复。
举个例子:vibrate(new int[]{100,200,300,400},2)
是指:先等待100ms,震动200ms,再等待300ms,震动400ms,接着就从pattern[2]的位置开始重复,就是继续的等待300ms,震动400ms,一直重复下去。当然传入0就是从开头一直重复下去,传入-1就是不重复震动。
(3)使用实例
写一个工具类封装
//震动milliseconds毫秒 public static void vibrate(final Activity activity, long milliseconds) { Vibrator vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE); vib.vibrate(milliseconds); } //以pattern[]方式震动 public static void vibrate(final Activity activity, long[] pattern,int repeat){ Vibrator vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE); vib.vibrate(pattern,repeat); } //取消震动 public static void virateCancle(final Activity activity){ Vibrator vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE); vib.cancel(); }
调用时也非常简单,因为可能存在多个地方关闭震动,所以添加一个标志位来判断震动是否已经开启,防止多次关闭抛出异常。
//开启震动 isVirating = true; VirateUtil.virate(XXXActivity.this, new long[]{1000, 1000, 1000, 1000}, 0) //关闭震动 if (isVirating) { isVirating = false; VirateUtil.virateCancle(XXXActivity.this); }
2、Android的振铃实现——MediaPlayer类
(1)需要用到的API
void setDataSource (Context context , Uri uri)//根据Uri设置音频,当然还有其他几个重载的方法来指定特定的音频。 void setLooping (boolean looping)//设置是否循环播放 void prepare ()//让MediaPlayer真正去装载音频文件 void start ()//开始或恢复播放 void pause ()//暂停播放,调用start()可以恢复播放 void stop ()//停止播放 boolean isPlaying ()//是否正在播放 void release ()//释放与此MediaPlayer关联的资源
(2)使用实例
同样写一个工具类封装
//开始播放 public static void playRing(final Activity activity){ try { Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);//用于获取手机默认铃声的Uri mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource(activity, alert); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);//告诉mediaPlayer播放的是铃声流 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(); } } }
使用就是调用上面方法即可。
(3)MediaPlayer的生命周期
引用官网上面的图片
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android硬件相关操作与应用总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
- PHP 安全与性能
- Extjs 项目中常用的小技巧,也许你用得着(5)--设置 Ext.data.Store 传参的请求方式
- WPF备忘录(5)怎样修改模板中的控件
- Linux 系统与数据库安全
- 使用委托实现同步回调与异步回调
- Application Firewall Design
- Extjs 项目中常用的小技巧,也许你用得着(4)---Extjs 中的cookie设置
- C#基础知识回顾--串行化与反串行化
- Shell实用实例参考
- 数据库记录安全解决方案
- 多客服功能终于也向所有微信认证的订阅号开放了
- WPF备忘录(4)打个勾画个叉娱乐下
- Linux Token Auth 一次性密码认证
- Oracle Hints - 先知的提示
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 统一服务消息接口报48001错误
- ggplot2|ggpubr进行“paper”组图合并
- PostgreSQL drop table 空间不释放的问题解决
- R语言预测人口死亡率:用李·卡特模型、非线性模型进行平滑估计
- Dockerfile 指令
- Docker 构建容器Tomcat+Nginx+MySQL
- 三种动态控制SAP CRM WebClient UI assignment block显示与否的方法
- TCGA数据库中癌症名称缩写
- CloudFlare自定义节点优化网站
- 什么是SSL?为什么要为WordPress网站使用SSL?
- R语言再保险合同定价案例研究
- SAP CRM附件的技术属性设计原理
- R语言对混合分布中的不可观测与可观测异质性因子分析
- R替换函数gsub
- R语言泊松回归对保险定价建模中的应用:风险敞口作为可能的解释变量