android p如何添加开机铃声
android P 开机铃声添加将audio.wav 放到bootanimation.zip 中的part0中。变量 persist.sys.bootanim.play_sound 控制释放播放铃声具体的代码具体的实现再bootanimation_main.cpp中static const char PLAY_SOUND_PROP_NAME[] = "persist.sys.bootanim.pl
·
android P 开机铃声添加将audio.wav 放到bootanimation.zip 中的part0中。
变量 persist.sys.bootanim.play_sound 控制释放播放铃声
具体的代码
具体的实现再bootanimation_main.cpp中
static const char PLAY_SOUND_PROP_NAME[] = "persist.sys.bootanim.play_sound";
static const char BOOT_COMPLETED_PROP_NAME[] = "sys.boot_completed";
static const char POWER_CTL_PROP_NAME[] = "sys.powerctl";
static const char BOOTREASON_PROP_NAME[] = "ro.boot.bootreason";
bool playSoundsAllowed() {
// Only play sounds for system boots, not runtime restarts.
if (android::base::GetBoolProperty(BOOT_COMPLETED_PROP_NAME, false)) {
return false;
}
// no audio while shutting down
if (!android::base::GetProperty(POWER_CTL_PROP_NAME, "").empty()) {
return false;
}
// Read the system property to see if we should play the sound.
// If it's not present, default to allowed.
if (!property_get_bool(PLAY_SOUND_PROP_NAME, 1)) {
return false;
}
// Don't play sounds if this is a reboot due to an error.
char bootreason[PROPERTY_VALUE_MAX];
if (property_get(BOOTREASON_PROP_NAME, bootreason, nullptr) > 0) {
for (const auto& str : PLAY_SOUND_BOOTREASON_BLACKLIST) {
if (strcasecmp(str.c_str(), bootreason) == 0) {
return false;
}
}
}
return true;
}
void playPart(int partNumber, const Animation::Part& part, int playNumber) override {
// only play audio file the first time we animate the part
if (playNumber == 0 && part.audioData && playSoundsAllowed()) {
ALOGD("playing clip for part%d, size=%d",
partNumber, part.audioLength);
// Block until the audio engine is finished initializing.
if (initAudioThread != nullptr) {
initAudioThread->join();
}
audioplay::playClip(part.audioData, part.audioLength);
}
};
更多推荐
已为社区贡献50条内容
所有评论(0)