安卓充电提示音无效

 

Android 7.0 在设置中新增加了充电提示音的打开选项,但打开后,插上充电线也是听不到充电音。根据查看代码可知,其实该充电提示音是指无线充电提示音。

  PowerManagerService.java中updateIsPoweredLocked函数中,

if (dockedOnWirelessCharger) {
 mNotifier.onWirelessChargingStarted();
 }

下面我们添加正常充电方式的提醒音量。

 frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java

///导包@{ 
import android.media.RingtoneManager;
import android.media.Ringtone;
///}@

在private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) 中添加如下方法
      

else if (action.equals(Intent.ACTION_USER_UNLOCKED)) {
                final int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL);
                mConditionProviders.onUserUnlocked(user);
                mListeners.onUserUnlocked(user);
                mAssistants.onUserUnlocked(user);
                mZenModeHelper.onUserUnlocked(user);

            /// for charge sound@{ 
            }else if (action.equals(Intent.ACTION_POWER_CONNECTED)){
            final boolean enabled = Settings.Global.getInt(getContext().getContentResolver(),  
                            Settings.Global.CHARGING_SOUNDS_ENABLED, 1) != 0;  
            final String soundPath = Settings.Global.getString(getContext().getContentResolver(),  
                            Settings.Global.WIRELESS_CHARGING_STARTED_SOUND); 

             if (enabled && soundPath != null) {  
                 final Uri soundUri = Uri.parse("file://" + soundPath);  
                 if (soundUri != null) {  
                     final Ringtone sfx = RingtoneManager.getRingtone(getContext(), soundUri);  
                     if (sfx != null) {  
                         sfx.setStreamType(AudioManager.STREAM_SYSTEM);  
                          sfx.play();  
                      }  
                  }  
             }               
        }
        ///}@   


       public void onStart() {  //在方法中添加如下方法

        filter.addAction(Intent.ACTION_USER_STOPPED);
        filter.addAction(Intent.ACTION_USER_SWITCHED);
        /// for charge sound@{ 
        filter.addAction(Intent.ACTION_POWER_CONNECTED);
        ///}@
        filter.addAction(Intent.ACTION_USER_ADDED);
        filter.addAction(Intent.ACTION_USER_REMOVED);

在2019年3月13日进行补充,在反复插拔充电器后可能会出现没有提示音的情况,解决办法如下:

02-14 17:03:04.144137   398  3781 E AudioFlinger: no more tracks available
02-14 17:03:04.144164   398  3781 E AudioFlinger_Threads: createTrack_l() initCheck failed -12; no control block?
Log显示Track的内存不够用了,问题原因是USB充电提示音每一次都创建一个Track,没有释放,导致内存不够用了。


/frameworks/base/services/core/java/com/android/server/power/Notifier.java添加成员变量: 
private Ringtone mRingtone; 
并把playChargingStartedSound函数的如下语句: 
final Ringtone sfx = RingtoneManager.getRingtone(mContext, soundUri); 
if (sfx != null) { 
sfx.setStreamType(AudioManager.STREAM_SYSTEM); 
sfx.play(); 
} 
改成: 
final Ringtone sfx = RingtoneManager.getRingtone(mContext, soundUri); 
if(null != mRingtone){ 
mRingtone.stop(); 
} 
mRingtone = sfx; 
if (sfx != null) { 
sfx.setStreamType(AudioManager.STREAM_SYSTEM); 
sfx.play(); 
} 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值