如何在Android中设置铃声+震动

news/2024/11/17 4:25:27/

有时候一些通讯软件需要这些个功能,比如说收到短信,通知等,要求手机发出铃声,或震动,或发光以提示用户知晓。往往手机都是有默认设置的,比如说用户开启了铃声+震动;只铃声不震动;完全静音等等...

这个时候就需要有一个规则了,起码软件的设置不能跟系统的冲突吧,中间的一些逻辑是要处理好的!之前做过的软件中有这么个需求,而且代码是我负责的,所以总结一下。

思路:

  1. 软件应该有个自己的设置配置文件,用以保存,自己的软件的提醒规则

  2. 遵从系统的设置,比如说:系统是完全静音的,人家想睡觉啦,你软件虽然是铃声震动全开,也得乖乖闭嘴。

  3. 如果有需要提醒了,先获取系统的配置,然后做逻辑判断给予什么样的提醒

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//首先需要接收一个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 ;
             }
     }

具体的实现就如代码那样子了,注释也很清楚了,其中SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mAppContext);

这个不多做解释,就是获取软件的配置信息。

当然这个类完全可以封装成一个静态类来使用,写的时候是比较恶心的,但是一次痛苦,终身快乐啊,哈哈!



http://www.ppmy.cn/news/720565.html

相关文章

教你把好听的背景音乐设置成铃声

我们每天看很多视频,总有一些视频背景音乐好听,如何设置成手机铃声呢?别着急,下面就让我来教大家如何操作,原来方法就是这么简单。 具体操作步骤如下: 步骤一:首先我们将视频保存到手机中&…

Android来电铃声默认设置的实现方法与如何设置语音来电的默认铃声

Android来电铃声默认设置的实现方法与如何设置语音来电的默认铃声 一、Android来电铃声默认设置的实现方法 Andoird默认来电铃声的设置方法为修改build/target/product/core.mk的ro.config.ringtone的值如 ro.config.ringtoneBackroad.ogg,该音乐文件必须于framewor…

android-铃声的设置与播放

在android系统中,不同铃声存放的铃声路径: /system/media/audio/ringtones 来电铃声/system/media/audio/notifications 短信通知铃声/system/media/audio/alarms 闹钟铃声 铃声的设置: import java.io.File;import …

android触摸提示音设置,vivo X6怎么关闭触摸提示音 vivo X6触摸提示音设置图文教程...

vivo X6触摸提示音怎么关闭呢?很多朋友们都不喜欢触摸提示音的存在,当然也有不少强迫症者不开触摸提示音就不适应,而像小编这种强迫症者来说不太喜欢开启。小编认为触摸提示音开启又费电,又“吵”,实在想不到它存在理由…

微信铃声怎么设置?微信铃声设置仅需3步

微信铃声怎么设置?自打微信腾空出世之后,已经成为我们日常生活中不可或缺的一份子,微信身为社交圈的“骨干精英”,自然会跟随潮流而优化的越来越好!而微信铃声就是一个例子! 以前我们接电话打电话都是用手机…

微信设置专属铃声,你有什么好歌推荐

微信已然成为公认的国民级社交软件了,现在大部分人发展一段社交关系的第一句话就是“咱们加个微信吧?”随着微信的普及,我们日常的通讯方式也从打电话变成了微信语音通话,既不用使用话费,也不用担心信号问题。 你是不是…

手机技巧:微信语音铃声怎么设置?

微信语音铃声怎么设置?微信随着版本的升级更新,优化的越来越好,功能也越来越多,现在就连语音通话时的铃声也有了,设置之后就不再是单调的默认响铃提醒。但还有好多小伙伴不知道怎么设置,下面来看看这铃声是…

常规Resnet模型权重转Detectron2格式模型

最佳想把在torchversion库加载的预训练权重基础上训练过的模型权重加载到Detectron2框架的任务中进行实验。 发现两者必须经过一个转换,实验过后有效的转换方式如下所示, #!/usr/bin/env python import pickle as pkl import sysimport torchif __name…