/trunk/frameworks/base/cmds/bootanimation/BootAnimation.cpp
status_t BootAnimation::readyToRun() {
.......
.......
将if (bBootOrShutDown) {}修改如下,注:针对不同MTK平台源码有所不同
修改成如下
if(needAnotherTheme()){
if (bBootOrShutDown) {
status_t err = mZip.open("/data/local/bootanimation2.zip");
XLOGD("[BootAnimation %s %d]err=%d,%s,/data/local/bootanimation2.zip",__FUNCTION__,__LINE__,err,strerror(-err));
if (err != NO_ERROR) {
err = mZip.open("/system/media/bootanimation2.zip");
XLOGD("[BootAnimation %s %d]err=%d,%s,/system/media/bootanimation2.zip",__FUNCTION__,__LINE__,err,strerror(-err));
if (err != NO_ERROR) {
mAndroidAnimation = true;
}
}
} else {
if (!bShutRotate) {
status_t err = mZip.open("/data/local/shutanimation2.zip");
XLOGD("[BootAnimation %s %d]err=%d,%s,/data/local/shutanimation2.zip",__FUNCTION__,__LINE__,err,strerror(-err));
if (err != NO_ERROR) {
err = mZip.open("/system/media/shutanimation2.zip");
XLOGD("[BootAnimation %s %d]err=%d,%s,/system/media/shutanimation2.zip",__FUNCTION__,__LINE__,err,strerror(-err));
if (err != NO_ERROR) {
mAndroidAnimation = true;
}
}
} else {
status_t err = mZip.open("/data/local/shutrotate2.zip");
XLOGD("[BootAnimation %s %d]err=%d,%s,/data/local/shutrotate2.zip",__FUNCTION__,__LINE__,err,strerror(-err));
if (err != NO_ERROR) {
err = mZip.open("/system/media/shutrotate2.zip");
XLOGD("[BootAnimation %s %d]err=%d,%s,/system/media/shutrotate2.zip",__FUNCTION__,__LINE__,err,strerror(-err));
if (err != NO_ERROR) {
mAndroidAnimation = true;
}
}
}
}
}else{
if (bBootOrShutDown) {
status_t err = mZip.open("/data/local/bootanimation.zip");
XLOGD("[BootAnimation %s %d]err=%d,%s,/data/local/bootanimation.zip",__FUNCTION__,__LINE__,err,strerror(-err));
if (err != NO_ERROR) {
err = mZip.open("/system/media/bootanimation.zip");
XLOGD("[BootAnimation %s %d]err=%d,%s,/system/media/bootanimation.zip",__FUNCTION__,__LINE__,err,strerror(-err));
if (err != NO_ERROR) {
mAndroidAnimation = true;
}
}
} else {
if (!bShutRotate) {
status_t err = mZip.open("/data/local/shutanimation.zip");
XLOGD("[BootAnimation %s %d]err=%d,%s,/data/local/shutanimation.zip",__FUNCTION__,__LINE__,err,strerror(-err));
if (err != NO_ERROR) {
err = mZip.open("/system/media/shutanimation.zip");
XLOGD("[BootAnimation %s %d]err=%d,%s,/system/media/shutanimation.zip",__FUNCTION__,__LINE__,err,strerror(-err));
if (err != NO_ERROR) {
mAndroidAnimation = true;
}
}
} else {
status_t err = mZip.open("/data/local/shutrotate.zip");
XLOGD("[BootAnimation %s %d]err=%d,%s,/data/local/shutrotate.zip",__FUNCTION__,__LINE__,err,strerror(-err));
if (err != NO_ERROR) {
err = mZip.open("/system/media/shutrotate.zip");
XLOGD("[BootAnimation %s %d]err=%d,%s,/system/media/shutrotate.zip",__FUNCTION__,__LINE__,err,strerror(-err));
if (err != NO_ERROR) {
mAndroidAnimation = true;
}
}
}
}
}
在该文件中加上下面的方法
bool BootAnimation::needAnotherTheme(void){
if(access("/protect_s/prod_info/theme.txt", F_OK) == 0){
return true;
}else{
return false;
}
}
修改bool BootAnimation::threadLoop()
{
.......
if(needAnotherTheme()){
if (!bBootOrShutDown) {
pSoundFileName= "/data/local/shutaudio2.mp3";
pBackupSoundFileName="/system/media/shutaudio2.mp3";
} else {
pSoundFileName= "/data/local/bootaudio2.mp3";
pBackupSoundFileName="/system/media/bootaudio2.mp3";
}
}else{
if (!bBootOrShutDown) {
pSoundFileName= "/data/local/shutaudio.mp3";
pBackupSoundFileName="/system/media/shutaudio.mp3";
} else {
pSoundFileName= "/data/local/bootaudio.mp3";
pBackupSoundFileName="/system/media/bootaudio.mp3";
}
}
bool bexist = false;
int nMp3Exist = -1;
bexist = (access(pSoundFileName, F_OK) == 0);
/trunk/frameworks/base/cmds/bootanimation/BootAnimation.h
private:
virtual bool threadLoop();
virtual status_t readyToRun();
virtual void onFirstRef();
virtual void binderDied(const wp<IBinder>& who);
virtual bool needAnotherTheme(void);
写一个activity通过开关或选择的形式进行替换不同开关机动画铃声的设置,例如RadioButton
private static final String READFILEPATH = "/protect_s/prod_info/theme.txt";
public boolean getResourceFlag() {
File f = new File(READFILEPATH);
return f.exists();
}
public boolean setResourceFlag(boolean v) {
try {
File f = new File(READFILEPATH);
if (v) {
f.createNewFile();
} else {
f.delete();
}
} catch (Exception e) {
return false;
}
return true;
}
通过 setResourceFlag()中的boolean参数来判断是否替换动画铃声开关选择
本文介绍如何在Android系统中根据特定文件的存在与否切换不同的启动动画和声音文件,涉及BootAnimation类的修改及Activity中资源标志的读写操作。
889

被折叠的 条评论
为什么被折叠?



