20181027[省電續航]音量省電控制功能V1.0
阿新 • • 發佈:2018-11-21
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 音量省電控制
目前邏輯
-
- 當高耗電場景的音量設定為最大值時,減少2個音量檔位;
-
- 退出高耗電場景,恢復之前狀態操作;
-
- 退出高耗電場景時,若判斷當前音量值被使用者改變,則不進行恢復恢復之前狀態操作;
-
- 關機時,恢復之前狀態操作;
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 檢視媒體音量條
後續功能接受,去除媒體音量條顯示效果