20181027[省电续航]音量省电控制功能V1.0

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/su749520/article/details/83447412

1. 需求

针对高耗电场景,尤其是游戏,进行音量或者音效的控制,已达到降低平均电流,达到省电的作用

2. 实现方案

2.1 高耗电场景

目前通过应用包名判断

  • 当指定界面显示于用户第一可见界面时,则判定为高耗电场景
  • 当指定界面不显示于用户第一可见界面时,则判定位正常场景
    private ILavaAppLockCallback mSecurityCabllback = new ILavaAppLockCallback.Stub() {

        @Override
        public void openAppLock(String packageName, String className) {
            if (AudioUtil.appList.contains(packageName)) {
                startAudioPowerSave();
            } else {
                stopAudioPowerSave();
            }
        }

2.2 音量省电控制

目前逻辑

    1. 当高耗电场景的音量设置为最大值时,减少2个音量档位;
    1. 退出高耗电场景,恢复之前状态操作;
    1. 退出高耗电场景时,若判断当前音量值被用户改变,则不进行恢复恢复之前状态操作;
    1. 关机时,恢复之前状态操作;
    public static int getMaxMediaVolume(Context mContext) {
        AudioManager mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
        return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    }

    public static int getMediaVolume(Context mContext) {
        AudioManager mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
        return mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
    }

    public static void setMediaVolume(Context mContext, int volume) {
        AudioManager mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
        mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, AudioManager.FLAG_PLAY_SOUND);
    }

2.3 音效省电控制(该功能暂时禁用)

    public static boolean isBesLoudnessEnable(Context mContext) {
        if (MTK_BESLOUDNESS_SUPPORT) {
            AudioManager mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
            return GET_BESLOUDNESS_STATUS_ENABLED.equals(mAudioManager.getParameters(GET_BESLOUDNESS_STATUS));
        }

        return false;
    }

    public static void startBesLoudPowerSave(Context mContext) {
        if (MTK_BESLOUDNESS_SUPPORT) {
            AudioManager mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
            mAudioManager.setParameters(SET_BESLOUDNESS_DISABLED);
        }
    }

    public static void stopBesLoudPowerSave(Context mContext) {
        if (MTK_BESLOUDNESS_SUPPORT) {
            AudioManager mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
            mAudioManager.setParameters(SET_BESLOUDNESS_ENABLED);
        }
    }

2.4 高耗电场景名单

    public final static List<String> appList = new ArrayList<String>() {
        {
            add("com.vectorunit.redcmgeplaycn");
            add("com.youku.phone");
        }
    };

3. 测试

3.1 日志运行情况

10-27 13:17:06.370: D/LavaPowerSaveService(8536): openApp packageName = com.vectorunit.redcmgeplaycn, className = com.vectorunit.redcmgechinatelecom.Red

10-27 13:17:06.410: D/AudioHelp(8536): startMediaVolumePowerSave old 15 -> new 13
10-27 13:17:10.016: D/AudioHelp(8536): stopMediaVolumePowerSave old 13 -> new 15

3.2 查看媒体音量条

后续功能接受,去除媒体音量条显示效果

猜你喜欢

转载自blog.csdn.net/su749520/article/details/83447412