ndfweb.cn

Android中Notification設置鈴聲+震動


2021-04-30 20:10:55 (5854)



有時候一些通訊軟件需要這些個功能,比如說收到短信,通知等,要求手機發出鈴聲,或震動,或發光以提示用戶知曉。往往手機都是有默認設置的,比如說用戶開啟了鈴聲+震動;隻鈴聲不震動;完全靜音等等...

這個時候就需要有一個規則了,起碼軟件的設置不能跟係統的衝突吧,中間的一些邏輯是要處理好的!之前做過的軟件中有這麼個需求,而且代碼是我負責的,所以總結一下。

思路:

  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.ndfweb.cn/news-842.html
  NDF俱乐部
  国际域名注册
  建站咨询
简体中文 NDF网站建设淘宝店 | ICO图标在线生成 | 外贸网站建设 | 联系我们
©2007-2025 NDF Corporation 鲁ICP备08005967号 Sitemap - RSSRSS订阅