android增加可以切换开关机动画与铃声

本文介绍如何在Android系统中根据特定文件的存在与否切换不同的启动动画和声音文件,涉及BootAnimation类的修改及Activity中资源标志的读写操作。

/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参数来判断是否替换动画铃声开关选择


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值