版权声明:本文为博主原创文章,未经博主允许不得转载。 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 音量省电控制
目前逻辑
-
- 当高耗电场景的音量设置为最大值时,减少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 查看媒体音量条
后续功能接受,去除媒体音量条显示效果