案例:要求在静音或振动模式下开机铃声禁止播放
版本:Android Q版本(Android 10)
因为之前添加开机铃声时是在vendor下面进行的处理,所以以下代码也是在vendor进行的处理
path:vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/BootAnimation.cpp
if (status)
@@ -538,7 +549,24 @@ bool BootAnimation::threadLoop()
// We have no bootanimation file, so we use the stock android logo
// animation.
sp<MediaPlayer> mediaplayer;
- const char* resourcePath = NULL;
+ // Monkey.20200611
+ // const char* resourcePath = NULL;
+ char audio[PROPERTY_VALUE_MAX];
+ property_get("persist.sys.bootanim.play_sound", audio, "1");
+ ALOGD("monkey persist.sys.bootanim.play_sound %d",atoi(audio));
+ int index = 0;
+ if (bBootOrShutDown) {
+ index = 0;
+ } else {
+ index = 1;
+ }
+
+ const char* resourcePath = mAudioPath[index][0];
+ if(atoi(audio) == 0){
+ resourcePath = NULL;
+ }
+ //for bootanimation end
+
基本在frameworks下面添加的开机铃声逻辑基本一样,所以不做过多说明
上层具体的操作要在振动或者静音处理的地方进行操作。
根据log分析当模式状态修改时frameworks/base/services/core/java/com/android/server/audio/AudioService.java文件进行了一些操作
path:frameworks/base/services/core/java/com/android/server/audio/AudioService.java
int maxSystemVolume = SystemProperties.getInt("ro.config.system_vol_steps", -1);
@@ -4955,6 +4963,17 @@ public class AudioService extends IAudioService.Stub
intent.putExtra(AudioManager.EXTRA_STREAM_VOLUME_MUTED, state);
sendBroadcastToAll(intent);
}
+ // Monkey.20201219 bootanim play sound
+ if (mStreamType == AudioSystem.STREAM_SYSTEM) {
+ if (state) {
+ Log.d("monkey_boot","resourcePath = NULL|"+state+"-|-"+SystemProperties.get("persist.sys.bootanim.play_sound","-1"));
+ SystemProperties.set("persist.sys.bootanim.play_sound", "0");
+ } else {
+ SystemProperties.set("persist.sys.bootanim.play_sound", "1");
+ Log.d("monkey_boot","resourcePath = NULL|"+state+"-|-"+SystemProperties.get("persist.sys.bootanim.play_sound","-1"));
+ }
+ }
+ // end
}
注:persist.sys.bootanim.play_sound为系统自带的一个操控开机铃声的属性。