1. 程式人生 > >20181027[省電續航]音量省電控制功能V1.0

20181027[省電續航]音量省電控制功能V1.0

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 檢視媒體音量條

後續功能接受,去除媒體音量條顯示效果