我们在做Android开发的时候,有时候会用到振动和响铃的功能,特别是一些有关通信类的,在接受到消息的时候需要通过振动和响铃的方式去提醒用户,下面就简单介绍一下具体怎么操作的。

1、振动功能的实现

(1)首先我们需要加入振动的权限

(2)我们需要用到Vibrator类去实现振动功能,下面说一下需要用到的几个方法:

//检查硬件是否有振动器

boolean hasVibrator ()

//控制手机振动milliseconds毫秒

void vibrate (long milliseconds)

//控制手机以指定pattern模式振动。

void vibrate (long[] pattern, int repeat)

//关闭震动

void cancel ()

其中除了第三个方法以外,其他的几个方法都好理解,这里就不做解释了。下面来说一下第三个方法,需要传递两个参数:pattern和repeat

pattern:传递的是一个int类型的数组,它们是以毫秒为单位打开或关闭振动器的持续时间。第一个值表示在打开振动器之前要等待的毫秒数。下一个值表示在关闭振动器之前保持振动器的毫秒数。随后的值在以毫秒为单位的持续时间之间交替,以关闭振动器或打开振动器。

repeat:要使模式重复,请将索引传递到要在其中开始重复的模式数组,否则为-1以禁用重复。传入0是开头一直重复下去,传入2是从下标为2的地方开始重复振动。

(3)下面简单封装了一个工具类

public class VibrateUtil {

/**

* 让手机振动milliseconds毫秒

*/

public static void vibrate(Context context, long milliseconds) {

Vibrator vib = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE);

if(vib.hasVibrator()){ //判断手机硬件是否有振动器

vib.vibrate(milliseconds);

}

}

/**

* 让手机以我们自己设定的pattern[]模式振动

* long pattern[] = {1000, 20000, 10000, 10000, 30000};

*/

public static void vibrate(Context context, long[] pattern,int repeat){

Vibrator vib = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE);

if(vib.hasVibrator()){

vib.vibrate(pattern,repeat);

}

}

/**

* 取消震动

*/

public static void virateCancle(Context context){

//关闭震动

Vibrator vib = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE);

vib.cancel();

}

}

(4)开启和关闭振动

// 开启震动

isVirating = true;

VirateUtil.virate(context, new long[]{100, 200, 100, 200}, 0)

//关闭震动

if (isVirating) {//防止多次关闭抛出异常,这里加个参数判断一下

isVirating = false;

VirateUtil.virateCancle(context);

}

2、响铃功能的实现

(1)权限问题

Android设置响铃铃需要更改系统设置,所以在6.0以后提高了权限级别,需要使用 WRITE_SETTINGS 权限才能进行响铃铃设置。

记得针对6.0设备,进行动态获取权限。

(2)播放响铃我们需要用到MediaPlayer类去实现,下面说一下需要用到的几个方法:

//根据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)下面还是简单封装了一个工具类

public class MediaUtil {

private static MediaPlayer mMediaPlayer;

//开始播放

public static void playRing(Context context){

try {

//用于获取手机默认铃声的Uri

Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);

mMediaPlayer = new MediaPlayer();

mMediaPlayer.setDataSource(context, 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)开启和关闭响铃

//开启

MediaUtil.playRing(context);

//关闭

MediaUtil.stopRing();

3、总结

以上就是开发振动和响铃的一个简单的例子,希望对大家有所帮助。。。

android 定时响铃,Android开发振动和响铃相关推荐

  1. android定时循环,Android AlarmManager实现定时循环后台任务

    这篇文章使用AlarmManager实现了Android定时后台循环任务.使用场景:项目需要app每隔一段时间就去服务端请求一次接口,从而更新本地保存的信息. AlarmManager简介 Alarm ...

  2. android 定时静音,Android实现定时自动静音小助手

    定时静音助手的实现方法,供大家参考,具体内容如下 背景 突发奇想,刚好这学期刚上安卓课程,想设计一个时间助手.工作.学习中经常会被突如其来的电话所打扰,在上班,上课时这突如其来的铃声会惹来别人的反感, ...

  3. android 定时动画,Android中实现计时的几种方式

    1.使用CountDownTimer private void TimerFun(){ final CountDownTimer countDownTimer = new CountDownTimer ...

  4. android 定时语音,android 定时语音天气播报

    记得当时毕业设计其中一项是天气预报, 当时还用自己做的天气预报去面试.因为太过简单. 由于那种强烈负罪感,这个天气预报是自己工作后1年业余时间补做的. 虽然市面上有很多天气预报了,也有定时语音播报,但 ...

  5. android 定时查询,android – 如何检查计时器是否仍在运行?

    我尝试在服务中发送短信.如果没有发送短信意味着我在一段时间后重新启动服务,为此我使用定时器.如果发送的短信意味着我想停止定时器,为了停止定时器我使用定时器.取消();在此之前,我要检查计时器是否正在运 ...

  6. android 定时闹钟逻辑,Android 定时执行任务 AlarmManager的使用(可用于闹钟开发)...

    Android 定时执行任务 AlarmManager的使用(可用于闹钟开发) 2011年7月13日加注:所有的定时任务在手机重启后会消失,如果需要重启后继续用,可以加个开机自启,然后重新设置. Al ...

  7. 《Android FFmpeg 播放器开发梳理》第一章 播放器初始化与解复用流程

    <Android FFmpeg 播放器开发梳理>: 第零章 基础公共类的封装 播放器初始化与解复用流程 这一章,我们来讲解播放器解复用(从文件中读取数据包)的流程.在讲解播放器的读数据包流 ...

  8. Android应用程序的开发

    前 言 Android是Google于2007年11月推出的一款开放的嵌入式操作系统平台,由于其完全开源的特性,Android正以空前的速度吸引着大批开发者的加入.为了帮助众多的软件开发人员尽快地掌握 ...

  9. android alarmmanager 收不到广播,android定时闹钟:Service+BroadcastReceiver+AlarmManager+NotificationManager...

    在开发android的过程中,需要一个定时提醒的功能,原本以为是一个很简单的功能,但是发现网上能找到的讲解或者代码都很或多或少地缺少一部分的设置和关键代码,所以我才注册了简书账户,分享一下. 在研究的 ...

最新文章

  1. GARFIELD@07-12-2005 DILBERT
  2. 《大话数据结构》第9章 排序 9.8 归并排序(上)
  3. 1.cocos2dx之Menu(CCMenuItemFont,CCMenuItemImage,CCMenuItemLabel,CCMenuItemSprite,CCMenuItemToggle)
  4. 1.计算机技术在音乐作品中的使用,数字技术在电子音乐中的应用论文
  5. oracle数据库归档闪回,[Oracle]Oracle的闪回归档
  6. Hibernate最简单教程
  7. Apriori算法+python实现
  8. linux dup用法,Linux:dup和dup2文件描述符及函数解析,dupdup2
  9. 兰州大学计算机复试英语翻译,2019兰州大学计算机专硕复试回忆
  10. Visual Studio 2017正式发布
  11. c++矩阵转置_线性代数(Gelbert)对称矩阵
  12. 开心赚手机网赚操作真实赚钱项目揭秘
  13. MySQL插入数据库乱码问题Incorrect string value: ‘\xE8\xB5\xB5‘ for column ‘name‘ at row 1
  14. Python之Lock锁
  15. 尚硅谷-SpringCloud
  16. AForge学习笔记(2):AForge.Controls
  17. 计算机网络漫谈:OSI七层模型与TCP/IP四层(参考)模型(转载)
  18. 淘汰国足后反被附体?伊朗0:3不敌日本无缘决赛
  19. 解析C语言结构体及位段
  20. sap销售发货的流程_外向交货发起的销售流程

热门文章

  1. Docker_03_彻底搞懂Dockerfile文件
  2. iOS storyboard 与 xib 间相互跳转
  3. [Linux Kernel] memory-barriers 内存屏蔽 官方文档
  4. 网易相册助手--批量上传下载好帮手
  5. 2021Java高级面试题,剖析Java开发未来的出路在哪里
  6. 一.学习前的准备-java程序员必备知识
  7. Ext Js 关于GridPanel---EditorGridPanel
  8. vulnhub靶场GoldenEye靶场
  9. 【浅析STM32之GPIO寄存器(CRL/CRH)配置 】
  10. java台球击球角度,台球瞄准方法--角度的计算----转