一个类似电视项目 ,用的是android 开发板,由于android 音量设置分很多种 ,系统音量,闹钟音量 ,媒体音量....
那么问题来了,如果我的设备没有实体按键 ,没有触摸该怎么处理呢 ?
而且在统一状态下 如何设置相应的音量,我遇到的问题就是,在播放媒体的时候,弹出的是通话音量,本来想找底层开发人员帮我把音量全部统一 ,方案公司懒得改 ,那就只能从应用层来做了,所有的音量统一设置 ,要加一起加,要剪一起剪 。
直接看代码 ,
在Activity service中直接调用AddVoice(); 或者reduiceVoice().方法就可以实现音量统一增减 ,里面有做判断,最大音量和最小音量,拿去浪吧
package com.mirror.util; import android.app.Service; import android.content.Context; import android.media.AudioManager; import android.util.Log; /** * 音量控制管理器 */ public class VoiceManager { private static final String TAG = "VoiceManager"; Context context; AudioManager mAudioManager; public VoiceManager(Context context) { this.context = context; if (mAudioManager == null) { mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE); } } /*** * 增大音量 */ public void addVoide() { dealCallVoice(true); dealSystemVoice(true); dealRingVoice(true); dealMediaVoice(true); dealMessageVoice(true); } /*** * 减少声音 */ public void reduceVoide() { dealCallVoice(false); dealSystemVoice(false); dealRingVoice(false); dealMediaVoice(false); dealMessageVoice(false); } /** * 提示音设置 * * @param b */ private void dealMessageVoice(boolean b) { if (mAudioManager == null) { mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE); } int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM); int current = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM); Log.i(TAG, "===处理前提示音音量====" + current + " /" + max); if (b) { if (current == max) { return; } mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, current + 1, 0); } else { if (current < 1) { return; } mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, current - 1, 0); } int maxdeal = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM); int currentdeal = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM); Log.e(TAG, "===处理前后提示音音量====" + currentdeal + " /" + maxdeal); } /*** * 处理媒体音量 * @param b */ private void dealMediaVoice(boolean b) { if (mAudioManager == null) { mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE); } int mediamax = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); int mediacurrent = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); Log.i(TAG, "===处理前媒体音量====" + mediacurrent + " /" + mediamax); if (b) { if (mediacurrent == mediamax) { return; } mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mediacurrent + 1, 0); } else { if (mediacurrent < 1) { return; } mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mediacurrent - 1, 0); } } /*** * 铃声音量 * @param b */ private void dealRingVoice(boolean b) { if (mAudioManager == null) { mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE); } int ringmax = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_RING); int ringcurrent = mAudioManager.getStreamVolume(AudioManager.STREAM_RING); Log.i(TAG, "===处理前铃声音量====" + ringcurrent + " /" + ringmax); if (b) { if (ringcurrent == ringmax) { return; } mAudioManager.setStreamVolume(AudioManager.STREAM_RING, ringcurrent + 1, 0); } else { if (ringcurrent < 1) { return; } mAudioManager.setStreamVolume(AudioManager.STREAM_RING, ringcurrent - 1, 0); } } /*** * 处理系统音量 * @param b */ private void dealSystemVoice(boolean b) { if (mAudioManager == null) { mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE); } int sysmax = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM); int syscurrent = mAudioManager.getStreamVolume(AudioManager.STREAM_SYSTEM); Log.i(TAG, "===设置前系统音量====" + syscurrent + " /" + sysmax); if (b) { if (syscurrent == sysmax) { return; } mAudioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, syscurrent + 1, 0); } else { if (syscurrent < 1) { return; } mAudioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, syscurrent - 1, 0); } } /*** * 处理通话音量 * @param isAdd * true 是音量+ * false 是音量- */ private void dealCallVoice(boolean isAdd) { if (mAudioManager == null) { mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE); } int callmax = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL); int callcurrent = mAudioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL); Log.e(TAG, "=====设置前通话音量==" + callcurrent + "/" + callmax); if (isAdd) { if (callcurrent == callmax) { return; } mAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, callcurrent + 1, 0); } else { if (callcurrent < 1) { return; } mAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, callcurrent - 1, 0); } } /*** * 静音 */ public void stopMediaVoice() { if (mAudioManager == null) { mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE); } mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0); //设置媒体音量为 0 } }