android 9插拔多次,充电提示音无声

测试压测,多次插拔充电器,发现充电提示音消失了,需要重新启动才能恢复,但重复操作又会复现。

参考blog:https://www.jianshu.com/p/455da8b1cd79
mediaPlayer未释放资源的问题,会导致其它模块播放media时出现(1,-19)
Ringtone 持有一个对应的mediaplayer,虽然Ringtone 每次播放前都释放资源,但是因为RingtoneManager每次返回的是一个新的Ringtone 对象,所以上面代码中,会不断的创建新的mediaplayer,导致出现无法播放问题。

为了防止出现资源未释放的问题,修改逻辑,使每次释放都有确切的操作:

Index: frameworks/base/services/core/java/com/android/server/power/Notifier.java
===================================================================
--- frameworks/base/services/core/java/com/android/server/power/Notifier.java	(版本 433)
+++ frameworks/base/services/core/java/com/android/server/power/Notifier.java	(工作副本)
@@ -152,6 +152,8 @@
     // True if a user activity message should be sent.
     private boolean mUserActivityPending;
 
+    private Ringtone mRingtone;
+
     public Notifier(Looper looper, Context context, IBatteryStats batteryStats,
             SuspendBlocker suspendBlocker, WindowManagerPolicy policy) {
         mContext = context;
@@ -187,6 +189,8 @@
         try {
             mBatteryStats.noteInteractive(true);
         } catch (RemoteException ex) { }
+
+        initChargingStartedSound();
     }
 
     /**
@@ -738,19 +742,43 @@
      * Plays the wireless charging sound for both wireless and non-wireless charging
      */
     private void playChargingStartedSound() {

+        //final String soundPath = Settings.Global.getString(mContext.getContentResolver(),
+        //        Settings.Global.CHARGING_STARTED_SOUND);
+        //if (isChargingFeedbackEnabled() && soundPath != null) {
+        //    final Uri soundUri = Uri.parse("file://" + soundPath);
+        //    if (soundUri != null) {
+        //        final Ringtone sfx = RingtoneManager.getRingtone(mContext, soundUri);
+        //        if (sfx != null) {
+        //            sfx.setStreamType(AudioManager.STREAM_SYSTEM);
+        //            sfx.play();
+        //        }
+        //    }
+        //}
+        if (mRingtone != null) {
+            mRingtone.stop();
+        }
+        if (isChargingFeedbackEnabled()) {
+            mRingtone.play();
+        }

+    }
+

+    private void initChargingStartedSound() {
         final String soundPath = Settings.Global.getString(mContext.getContentResolver(),
                 Settings.Global.CHARGING_STARTED_SOUND);
-        if (isChargingFeedbackEnabled() && soundPath != null) {
+        if (soundPath != null) {
             final Uri soundUri = Uri.parse("file://" + soundPath);
             if (soundUri != null) {
-                final Ringtone sfx = RingtoneManager.getRingtone(mContext, soundUri);
-                if (sfx != null) {
-                    sfx.setStreamType(AudioManager.STREAM_SYSTEM);
-                    sfx.play();
+                mRingtone = RingtoneManager.getRingtone(mContext, soundUri);
+                if (mRingtone != null) {
+                    mRingtone.setStreamType(AudioManager.STREAM_SYSTEM);
                 }
             }
         }
     }

 
     private void showWirelessChargingStarted(int batteryLevel) {
         playWirelessChargingVibration();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值