压力测试,多次插拔充电器,之后无论怎么插拔都无声,必须重启。
问题是资源管理,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();