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

压力测试,多次插拔充电器,之后无论怎么插拔都无声,必须重启。
问题是资源管理,Ringtone每次播放时才初始化,并且播放前没有判断是否有声音在播放。
直接上代码:

Index: frameworks/base/services/core/java/com/android/server/power/Notifier.java
===================================================================
--- frameworks/base/services/core/java/com/android/server/power/Notifier.java	(版本 432)
+++ frameworks/base/services/core/java/com/android/server/power/Notifier.java	(版本 435)
@@ -152,6 +152,8 @@
     // True if a user activity message should be sent.
     private boolean mUserActivityPending;
 
+    private Ringtone mRingtone; // @ + for BUG #
+
     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(); // @ + for BUG #
     }
 
     /**
@@ -738,19 +742,43 @@
      * Plays the wireless charging sound for both wireless and non-wireless charging
      */
     private void playChargingStartedSound() {
+        // @ +- for BUG # {
+        //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();
+        }
+        // @ +- for BUG # }
+    }
+
+    // @ + for BUG # {
+    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);
                 }
             }
         }
     }
+    // @ + for BUG # }
 
     private void showWirelessChargingStarted(int batteryLevel) {
         playWirelessChargingVibration();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值