Android 5.1 Settings添加通知震动,通知音乐的开关功能实现

   转载请注明我的链接,尊重原创 !!!!!!!!!!!!!


  在Android系统订制Settings模块的时候需要添加许多自定义的功能,本文就讲一下如何在Settings模块实现通知震动和通知音乐的开关功能实现。

   主要思路是在

     1:Settings DB中添加两个Switch开关,一个是通知音乐  一个是通知震动 ,关闭的时候所有的Notifiction都没法震动和播放提示音。

    2:在framework的notificationManager修改代码添加变量控制

  

     首先了解Setting的音量,亮度许多变量都是存储在framework的settingDB中,现在我们要在这个DB添加两个bool类型的变量

    (1) base/core/java/android/provider/Settings.java  

  

/**
     * System settings, containing miscellaneous system preferences.  This
     * table holds simple name/value pairs.  There are convenience<pre name="code" class="java">    public static final String[] SETTINGS_TO_BACKUP = {
            STAY_ON_WHILE_PLUGGED_IN,   // moved to global
            WIFI_USE_STATIC_IP,
            WIFI_STATIC_IP,
            WIFI_STATIC_GATEWAY,
            WIFI_STATIC_NETMASK,
            WIFI_STATIC_DNS1,
            WIFI_STATIC_DNS2,
            BLUETOOTH_DISCOVERABILITY,
            BLUETOOTH_DISCOVERABILITY_TIMEOUT,
            DIM_SCREEN,
            SCREEN_OFF_TIMEOUT,
            SCREEN_BRIGHTNESS,
            SCREEN_BRIGHTNESS_MODE,
            SCREEN_AUTO_BRIGHTNESS_ADJ,
            VIBRATE_INPUT_DEVICES,
            MODE_RINGER_STREAMS_AFFECTED,
            VOLUME_VOICE,
            VOLUME_SYSTEM,
            VOLUME_RING,
            VOLUME_MUSIC,
            VOLUME_ALARM,
            VOLUME_NOTIFICATION,
            VOLUME_BLUETOOTH_SCO,
            VOLUME_VOICE + APPEND_FOR_LAST_AUDIBLE,
            VOLUME_SYSTEM + APPEND_FOR_LAST_AUDIBLE,
            VOLUME_RING + APPEND_FOR_LAST_AUDIBLE,
            VOLUME_MUSIC + APPEND_FOR_LAST_AUDIBLE,
            VOLUME_ALARM + APPEND_FOR_LAST_AUDIBLE,
            VOLUME_NOTIFICATION + APPEND_FOR_LAST_AUDIBLE,
            VOLUME_BLUETOOTH_SCO + APPEND_FOR_LAST_AUDIBLE,
            TEXT_AUTO_REPLACE,
            TEXT_AUTO_CAPS,
            TEXT_AUTO_PUNCTUATE,
            TEXT_SHOW_PASSWORD,
            AUTO_TIME,                  // moved to global
            AUTO_TIME_ZONE,             // moved to global
            TIME_12_24,
            DATE_FORMAT,
            DTMF_TONE_WHEN_DIALING,
            DTMF_TONE_TYPE_WHEN_DIALING,
            HEARING_AID,
            TTY_MODE,
            SOUND_EFFECTS_ENABLED,
            HAPTIC_FEEDBACK_ENABLED,
            POWER_SOUNDS_ENABLED,       // moved to global
            DOCK_SOUNDS_ENABLED,        // moved to global
            LOCKSCREEN_SOUNDS_ENABLED,
            SHOW_WEB_SUGGESTIONS,
            NOTIFICATION_LIGHT_PULSE,
            SIP_CALL_OPTIONS,
            SIP_RECEIVE_CALLS,
            POINTER_SPEED,
            VIBRATE_WHEN_RINGING,
            RINGTONE,
            LOCK_TO_APP_ENABLED,
            NOTIFICATION_SOUND,
            ANR_DEBUGGING_MECHANISM,
            ANR_DEBUGGING_MECHANISM_STATUS,
	    <span style="color:#ff0000;">NOTIFICATION_VIBRATE,         //add by zhongqi.shao on 2016-09-28 start
	    NOTIFICATION_MUSIC,</span>
	    KEY_VIBRATE
        };

* functions for accessing individual settings entries. */ public static final class System extends NameValueTable { public static final String SYS_PROP_SETTING_VERSION = "sys.settings_system_version"; /** * The content:// style URL for this table */ public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/system"); public static final String RNS_USER_PREFERENCE = "rns_user_preference"; /**add by zhongqi.shao on 2016-09-28 start*/public static final String NOTIFICATION_VIBRATE = "notification_vibrate";public static final String NOTIFICATION_MUSIC = "notification_music";public static final String KEY_VIBRATE = "key_vibrate";/**add by zhongqi.shao on 2016-09-28 end*/

 
      }

         (2)base/packages/SettingsProvider/res/values/defaults.xml

         

      <!--add by zhongqi.shao on 2016-09-28 start-->
	<bool name="def_notification_vibrate">false</bool>
	<bool name="def_notification_music">false</bool>
	<bool name="def_key_vibrate">false</bool>
	<!--add by zhongqi.shao on 2016-09-28 end-->

        (3) base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

         

 	//add by zhongqi.shao on 2016-09-28 start
 			<span style="color:#ff0000;">loadBooleanSetting(stmt, Settings.System.NOTIFICATION_VIBRATE,R.bool.def_notification_vibrate); 
 			loadBooleanSetting(stmt, Settings.System.NOTIFICATION_MUSIC,R.bool.def_notification_music); 
 			loadBooleanSetting(stmt, Settings.System.KEY_VIBRATE,R.bool.def_key_vibrate); </span>
             //add by zhongqi.shao on 2016-09-28 end
  

      到这SettingDB添加两个bool类型的变量就结束了,别忘记make update-api更新framework一下

     这时候我们需要更改NotificationManagerService的逻辑了

    (5)base/services/core/java/com/android/server/notification/NotificationManagerService.java

     

             if (hasValidSound) {
             /** modify by zhongqi.shao on 2016-09-28 start for settings notifition sound open*/
 			boolean settingsOpen = (Settings.System.getInt( getContext().getContentResolver(), Settings.System.NOTIFICATION_MUSIC,0) != 0);
             if (<span style="color:#ff0000;">settingsOpen </span>&& hasValidSound) {  /** modify by zhongqi.shao on 2016-09-28 end*/
                 boolean looping =
                         (notification.flags & Notification.FLAG_INSISTENT) != 0;
                 AudioAttributes audioAttributes = audioAttributesForNotification(notification);
...	...
@@ -2262,10 +2269,14 @@ public class NotificationManagerService extends SystemService {
             // The DEFAULT_VIBRATE flag trumps any custom vibration AND the fallback.
             final boolean useDefaultVibrate =
                     (notification.defaults & Notification.DEFAULT_VIBRATE) != 0;
 
             
             //modify by zhongqi.shao on 2016-09-28 start
 			final boolean settingsVibrationOpen = (Settings.System.getInt( getContext().getContentResolver(), Settings.System.NOTIFICATION_VIBRATE,0) != 0);
             //modify by zhongqi.shao on 2016-09-28 end				 
 			 
             if ((useDefaultVibrate || convertSoundToVibration || hasCustomVibrate)
                     && !(mAudioManager.getRingerModeInternal()
                             == AudioManager.RINGER_MODE_SILENT)) {
                             == AudioManager.RINGER_MODE_SILENT) && <span style="color:#ff0000;">settingsVibrationOpen</span>) {
                 mVibrateNotificationKey = record.getKey();
 
                 if (useDefaultVibrate || convertSoundToVibration) {
     就是在发送通知的地方增加系统变量控制,具体逻辑就多看看源代码吧,这篇博文给定值Settings的童鞋来个思路!

    Just  Like!Just Do IT!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值