初始化音频管理器
/**
* 初始化音频管理器
*/
private void initAudioManager() {
audioManager = (AudioManager) (Context.AUDIO_SERVICE);
if (.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
(AudioManager.MODE_IN_COMMUNICATION);
} else {
(AudioManager.MODE_IN_CALL);
}
(true); //默认为扬声器播放
}
切换到听筒模式
/**
* 切换到听筒模式
*/
(false);
if (.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
(AudioManager.STREAM_MUSIC,
(AudioManager.MODE_IN_COMMUNICATION), AudioManager.FX_KEY_CLICK);
} else {
(AudioManager.STREAM_MUSIC,
(AudioManager.MODE_IN_CALL), AudioManager.FX_KEY_CLICK);
}
切换到耳机模式
/**
* 切换到耳机模式
*/
public void changeToHeadsetMode(){
currentMode = MODE_HEADSET;
(false);
}
切换到外放模式
/**
* 切换到外放模式
*/
public void changeToSpeakerMode(){
currentMode = MODE_SPEAKER;
(true);
}
设置音量
音量+/-按钮触发
private void setVolume(Context context,boolean upVolume){
int volume = (AudioManager.STREAM_MUSIC);
if (upVolume) {
volume+=1;
}else{
volume-=1;
}
int maxVolume = (AudioManager.STREAM_MUSIC);
if(volume>=0 && volume<=maxVolume){
(AudioManager.STREAM_MUSIC, volume, FLAG_SHOW_UI);
(("%s->volume:%d,maxVolume:%d",(upVolume?"upVolume":"downVolume"),volume,maxVolume));
}
}
FLAG_SHOW_UI 控制是否显示显示音量大小的ui弹框
拦截系统的音量+/-按钮
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
("onKeyDown->KEYCODE_VOLUME_DOWN");
(this);
return true;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
("onKeyDown->KEYCODE_VOLUME_UP");
(this);
return true;
} else return (keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
("onKeyUp->KEYCODE_VOLUME_DOWN");
return true;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
("onKeyUp->KEYCODE_VOLUME_UP");
return true;
} else return (keyCode, event);
}
控制音量状态写成了一个单例类
/**
* 音乐播放管理类
* Created by Administrator on 2015/8/27 0027.
*/
public class PlayerManager {
/**
* 外放模式
*/
public static final int MODE_SPEAKER = 0;
/**
* 耳机模式
*/
public static final int MODE_HEADSET = 1;
/**
* 听筒模式
*/
public static final int MODE_EARPIECE = 2;
private static PlayerManager playerManager;
private AudioManager audioManager;
private Context context;
private int currentMode = MODE_SPEAKER;
public static PlayerManager getManager(){
if (playerManager == null){
synchronized (){
playerManager = new PlayerManager();
}
}
return playerManager;
}
public void init(Context context){
= context;
initAudioManager();
}
/**
* 初始化音频管理器
*/
private void initAudioManager() {
audioManager = (AudioManager) (Context.AUDIO_SERVICE);
if (.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
(AudioManager.MODE_IN_COMMUNICATION);
} else {
(AudioManager.MODE_IN_CALL);
}
(true); //默认为扬声器播放
}
/**
* 获取当前播放模式
* @return
*/
public int getCurrentMode() {
return currentMode;
}
/**
* 切换到听筒模式
*/
public void changeToEarpieceMode(){
currentMode = MODE_EARPIECE;
(false);
if (.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
(AudioManager.STREAM_MUSIC,
(AudioManager.MODE_IN_COMMUNICATION), AudioManager.FX_KEY_CLICK);
} else {
(AudioManager.STREAM_MUSIC,
(AudioManager.MODE_IN_CALL), AudioManager.FX_KEY_CLICK);
}
}
/**
* 切换到耳机模式
*/
public void changeToHeadsetMode(){
currentMode = MODE_HEADSET;
(false);
}
/**
* 切换到外放模式
*/
public void changeToSpeakerMode(){
currentMode = MODE_SPEAKER;
(true);
}
/**
* 调大音量
*/
public void raiseVolume(){
int currentVolume = (AudioManager.STREAM_MUSIC);
if (currentVolume < (AudioManager.STREAM_MUSIC)) {
(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE, AudioManager.FX_FOCUS_NAVIGATION_UP);
}
}
/**
* 调小音量
*/
public void lowerVolume(){
int currentVolume = (AudioManager.STREAM_MUSIC);
if (currentVolume > 0) {
(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_LOWER, AudioManager.FX_FOCUS_NAVIGATION_UP);
}
}
public void raiseVolume(Context context){
setVolume(context,true);
}
public void lowerVolume(Context context){
setVolume(context,false);
}
private void setVolume(Context context,boolean upVolume){
int volume = (AudioManager.STREAM_MUSIC);
if (upVolume) {
volume+=1;
}else{
volume-=1;
}
int maxVolume = (AudioManager.STREAM_MUSIC);
if(volume>=0 && volume<=maxVolume){
(AudioManager.STREAM_MUSIC, volume, FLAG_SHOW_UI);
(("%s->volume:%d,maxVolume:%d",(upVolume?"upVolume":"downVolume"),volume,maxVolume));
}
}
}
监听耳机插入拔出的状态监听
class HeadsetReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = ();
switch (action){
//插入和拔出耳机会触发此广播
case Intent.ACTION_HEADSET_PLUG:
addHint(Intent.ACTION_HEADSET_PLUG);
int state = ("state", 0);
if (state == 1){
//耳机已插入
();
} else if (state == 0){
//耳机已拔出
}
break;
}
}
}