- 浏览: 223646 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (109)
- IOS (15)
- 设计模式 (7)
- XML (1)
- Android (31)
- 面试经 (1)
- J2EE (3)
- android md5 加密 (2)
- android imagebutton文字实现 (1)
- 反射机制 (2)
- 基础知识 (1)
- linux (3)
- java (4)
- java基础 (2)
- 文章 (1)
- myeclipse tomcat (1)
- Hadoop (1)
- ubuntu (2)
- redmine (1)
- python (4)
- jmeter (10)
- xamarin (1)
- selenium (9)
- nexus (1)
- appium (3)
- BDD (1)
- apache2 (1)
- zabbix (2)
- python,webdriver (1)
- ajax (1)
- jmeter,正则表达式,关联 (2)
- 性能测试工具 (1)
- Django (0)
- Intelij (1)
- RAP (0)
- 性能测试 (0)
最新评论
有时候一些通讯软件需要这些个功能,比如说收到短信,通知等,要求手机发出铃声,或震动,或发光以提示用户知晓。往往手机都是有默认设置的,比如说用户开启了铃声+震动;只铃声不震动;完全静音等等...
这个时候就需要有一个规则了,起码软件的设置不能跟系统的冲突吧,中间的一些逻辑是要处理好的!之前做过的软件中有这么个需求,而且代码是我负责的,所以总结一下。
思路:
1. 软件应该有个自己的设置配置文件,用以保存,自己的软件的提醒规则
2. 遵从系统的设置,比如说:系统是完全静音的,人家想睡觉啦,你软件虽然是铃声震动全开,也得乖乖闭嘴。
3. 如果有需要提醒了,先获取系统的配置,然后做逻辑判断给予什么样的提醒。
//首先需要接收一个Notification的参数
private void setAlarmParams(Notification notification) {
//AudioManager provides access to volume and ringer mode control. AudioManager volMgr = (AudioManager) mAppContext.getSystemService(Context.AUDIO_SERVICE);
switch (volMgr.getRingerMode()) {
//获取系统设置的铃声模式
case AudioManager.RINGER_MODE_SILENT:
//静音模式,值为0,这时候不震动,不响铃
notification.sound = null;
notification.vibrate = null;
break;
case AudioManager.RINGER_MODE_VIBRATE:
//震动模式,值为1,这时候震动,不响铃
notification.sound = null;
notification.defaults |= Notification.DEFAULT_VIBRATE; break; case AudioManager.RINGER_MODE_NORMAL:
//常规模式,值为2,分两种情况:1_响铃但不震动,2_响铃+震动
Uri ringTone = null;
//获取软件的设置
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mAppContext);
if(!sp.contains(SystemUtil.KEY_RING_TONE)){
//如果没有生成配置文件,那么既有铃声又有震动
notification.defaults |= Notification.DEFAULT_VIBRATE; notification.defaults |= Notification.DEFAULT_SOUND;
}else{ String ringFile = sp.getString(SystemUtil.KEY_RING_TONE, null);
if(ringFile==null){
//无值,为空,不播放铃声
ringTone=null;
}else if(!TextUtils.isEmpty(ringFile)){
//有铃声:1,默认2自定义,都返回一个uri
ringTone=Uri.parse(ringFile);
}
notification.sound = ringTone;
boolean vibrate = sp.getBoolean(SystemUtil.KEY_NEW_MAIL_VIBRATE,true);
if(vibrate == false){
//如果软件设置不震动,那么就不震动了
notification.vibrate = null;
}else{
//否则就是需要震动,这时候要看系统是怎么设置的:不震动=0;震动=1;仅在静音模式下震动=2;
if(volMgr.getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER) == AudioManager.VIBRATE_SETTING_OFF){
//不震动
notification.vibrate = null;
}else if(volMgr.getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER) == AudioManager.VIBRATE_SETTING_ONLY_SILENT){
//只在静音时震动
notification.vibrate = null; }else{
//震动
notification.defaults |= Notification.DEFAULT_VIBRATE;
}
}
}
notification.flags |= Notification.FLAG_SHOW_LIGHTS;
//都给开灯
break;
default: break;
}
}
这个时候就需要有一个规则了,起码软件的设置不能跟系统的冲突吧,中间的一些逻辑是要处理好的!之前做过的软件中有这么个需求,而且代码是我负责的,所以总结一下。
思路:
1. 软件应该有个自己的设置配置文件,用以保存,自己的软件的提醒规则
2. 遵从系统的设置,比如说:系统是完全静音的,人家想睡觉啦,你软件虽然是铃声震动全开,也得乖乖闭嘴。
3. 如果有需要提醒了,先获取系统的配置,然后做逻辑判断给予什么样的提醒。
//首先需要接收一个Notification的参数
private void setAlarmParams(Notification notification) {
//AudioManager provides access to volume and ringer mode control. AudioManager volMgr = (AudioManager) mAppContext.getSystemService(Context.AUDIO_SERVICE);
switch (volMgr.getRingerMode()) {
//获取系统设置的铃声模式
case AudioManager.RINGER_MODE_SILENT:
//静音模式,值为0,这时候不震动,不响铃
notification.sound = null;
notification.vibrate = null;
break;
case AudioManager.RINGER_MODE_VIBRATE:
//震动模式,值为1,这时候震动,不响铃
notification.sound = null;
notification.defaults |= Notification.DEFAULT_VIBRATE; break; case AudioManager.RINGER_MODE_NORMAL:
//常规模式,值为2,分两种情况:1_响铃但不震动,2_响铃+震动
Uri ringTone = null;
//获取软件的设置
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mAppContext);
if(!sp.contains(SystemUtil.KEY_RING_TONE)){
//如果没有生成配置文件,那么既有铃声又有震动
notification.defaults |= Notification.DEFAULT_VIBRATE; notification.defaults |= Notification.DEFAULT_SOUND;
}else{ String ringFile = sp.getString(SystemUtil.KEY_RING_TONE, null);
if(ringFile==null){
//无值,为空,不播放铃声
ringTone=null;
}else if(!TextUtils.isEmpty(ringFile)){
//有铃声:1,默认2自定义,都返回一个uri
ringTone=Uri.parse(ringFile);
}
notification.sound = ringTone;
boolean vibrate = sp.getBoolean(SystemUtil.KEY_NEW_MAIL_VIBRATE,true);
if(vibrate == false){
//如果软件设置不震动,那么就不震动了
notification.vibrate = null;
}else{
//否则就是需要震动,这时候要看系统是怎么设置的:不震动=0;震动=1;仅在静音模式下震动=2;
if(volMgr.getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER) == AudioManager.VIBRATE_SETTING_OFF){
//不震动
notification.vibrate = null;
}else if(volMgr.getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER) == AudioManager.VIBRATE_SETTING_ONLY_SILENT){
//只在静音时震动
notification.vibrate = null; }else{
//震动
notification.defaults |= Notification.DEFAULT_VIBRATE;
}
}
}
notification.flags |= Notification.FLAG_SHOW_LIGHTS;
//都给开灯
break;
default: break;
}
}
发表评论
-
Starting emulator for AVD 'android' PANIC: Could not open: android
2013-05-21 13:29 1896我的电脑-->属性-->高级-->环境变量。 ... -
eclipse4.2版本下面安装ADT,安装已经完成了,但没有ADT的那个图标显示
2013-05-21 13:26 919如果安装过程没错,直接在Eclipse ->window ... -
Android 打包签名 从生成keystore到完成签名 -
2012-10-30 00:49 931首先,我们需要一个keystore,当然已经有了的话就不用这一 ... -
解决更新并使用最新ADT20不能创建android项目问题
2012-10-18 22:20 1020不知道谷歌又怎么了,每次更新ADT插件就会出现各种各样的问题, ... -
ORACLE分页查询SQL语法
2012-10-18 22:20 1184oracle数据库 --1:无ORDER BY ... -
Activity生命周期
2012-10-18 22:20 1120博客分类: Android 新的activit ... -
布局
2012-10-18 22:21 1068padding:描述控件里面的内容与控件的关机,内边距;有四个 ... -
常用控件:TextView EditView
2012-10-13 13:32 1148TextView 布局: Xml代 ... -
按钮控件
2012-10-13 13:32 1167监听器: 监听器 方法 内容 OnClickList ... -
菜单
2012-10-13 13:31 1089menu键触发 三种形式:普通的option menu;上下 ... -
HttpClient
2012-10-13 13:31 1105在Android开发中我们经常会用到网络连接功能与服务器进行数 ... -
Android 的一些提示框
2012-10-08 00:57 7771.在测试时,如何实现一个提示 可以使用 Toast.ma ... -
Intent的几种用法
2012-10-08 00:57 917下面列出几种Intent的用法 1. 启动一个新的Activ ... -
Android改变窗口标题栏的布局
2012-10-10 23:26 897一、 重点 一般应用的Title都是建立应用时在Androi ... -
android中如何自定义attributes
2012-10-10 23:26 968写程序中可能需要用到一些自定义的view控件,这样就需要增加一 ... -
android manifest.xml中元素含义
2012-10-08 00:56 814android:allowTaskReparenting 是 ... -
十二个android编程技巧
2012-10-10 23:26 9781.让一个图片透明: Java代码 1. Bitm ... -
Android Phone类分析
2012-10-10 23:26 1214AccelerometerListener:感应 ... -
android控件设置居中方式
2012-10-07 00:16 8438垂直居中 android:layout_centerVert ... -
android TextView属性大全
2012-10-10 23:28 952android:autoLink设置是否当 ...
相关推荐
关于android铃声模式和振动模式的调用方法
里面有的内容可能你不需要,有的内容可以扩充。 这个是关于android手机情景模式设置的小例子。希望对大家有利
我自己写的一个简单的情景模式,有铃音、振动、静音、铃音及振动。四种模式。界面简单实用
摘要:Java源码,Android源码,铃声设置 Android铃声设置模块源码,通过本Andorid源码将了解以下相关技巧: 声明和取得TabHost对象、新建一个newTabSpec(newTabSpec)、设置其标签和图标(setIndicator)、设置内容...
另外,使用Sleepmot,您可以将铃声模式设置为在接听电话时振动。 在优先模式下,呼叫将不会振铃或什么都不触发,因此您无法将其设置为仅振动。 嘿,那我为什么不使用飞行模式呢? 在飞机模式下,您无法接听电话。 ...
android短信开发中一个经典的参考案例,拥有短信彩信接收的各种设置 包括铃声 振动 LED灯等等,还支持不同联系人单独设置..
Android Notification 详细解读 Android Notification 是 ...5. 发出听得见的警告声(铃声,保存的声音文件) Android Notification 是一种非常有用的对话机制,能够帮助开发者在应用程序中提供更好的用户体验。
当程序发现手机被翻成背面时,就会将铃声模式更改为振动模式,如在上班会议等其他场合中忘记将铃声调整为静音振动时,就可以利用这个程序快速地关闭手机铃声。 分享参考自Android SDK开发范例大全第3版。
您可能感兴趣的文章:android开发之蜂鸣提示音和震动提示的实现原理与参考代码Android实现调用震动的方法android滑动解锁震动效果的开启和取消android获取情景模式和铃声 实现震动、铃声提醒Android实现手机震动效果...
实现简单的闹钟功能,到时间后振动提醒,没有系统自带闹钟的铃声
检索当前运行的应用程序▪ 更改您的音频设置▪ 装载和卸载文件系统▪ 拦截外拨电话▪ 读取联系人数据▪ 读取手机状态和身份▪ 开机时自动启动▪ 录音▪ 修改/删除 SD 卡中的内容▪ 显示系统级警报▪ 控制振动器▪ ...
这是个基于android2.2的闹钟小程序,集合了alarm listview dialog intent broadcast 铃声 振动等多种技术,因为是一个练手的小程序所以代码比较乱
概述有3个主要组成部分: 本地通知(管理布局通知) 全局通知(管理浮动通知) 通知远程(管理状态栏通知) 和2个次要组件: 公告板(保存公告列表) 通知效果(管理铃声,振动等) 每个通知可以具有自己的布局和...
这是使用android闹钟的必须类,可以设置闹钟重复提醒,切换关闭与打开状态。以及跳转的广播。 Broadcast的使用。通过广播的方式打开acivity,实现摇晃闹钟。 使用播放铃声、控制振动器。通过MediaPlayer和Vibrator类...
设置系统铃声作为报警音、提示音 手势解锁 按键解锁:锁屏状态按键解锁 音量锁定 屏蔽关机 闪光灯开关 振动开关 报警模式:口袋模式/重力感应/光感应 USB拔插报警(拔出耳机或数据线) 延迟报警,弹出手势解锁 重力...
静音切换棒棒糖 一个简单的应用程序,可以在每次运行时在完整、振动和静音(优先)模式之间切换铃声音量。 旨在用于 Android 5.0 Lollipop。
停止计时器 目前可在Google Play上使用的Android应用程序的完整源代码: Stop... 自定义每个计时器间隔的蜂鸣/铃声,蜂鸣次数和振动设置。 创建重复计时器(如果有多个间隔,则所有间隔按顺序结束后,计时器将重复
该应用程序会在响铃时响铃,振动和/或使屏幕变白(或三者的任意组合)。 它还会按时响铃,这是可配置的。 该应用程序的网站位于 。 您可以在Google Play商店中安装该应用程序:这个应用程式的状态是什么? 上次更新...
除了空间音频,Android 12 上的 App 还可以通过手机的振动马达,提供与声音相匹配的触觉反馈,实现更身临其境的游戏和音频体验。例如,可以使用通过不同铃声对应触觉反馈来识别来电者,或者在赛车游戏中模拟崎岖路面...