Android 设备插拔耳机状态监听;播放视频,音频切换(外放,耳机).

 

  核心代码:

 import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothHeadset;
import android.bluetooth.BluetoothProfile;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
 
import tv.buka.roomSdk.util.LogUtil;
 
 
/**
 * 耳机状态监听
 *  注册广播监听
 *
 */
public class HeadsetPlugReceiver extends BroadcastReceiver {
    private static final String TAG = "HeadsetPlugReceiver";
 
    private HeadsetPlugListener mHeadsetPlugListener;
 
    public HeadsetPlugReceiver(HeadsetPlugListener headsetPlugListener) {
        this.mHeadsetPlugListener = headsetPlugListener;
    }
 
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED.equals(action)) {
            LogUtil.e(TAG, action);
            BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
                int state = adapter.getProfileConnectionState(BluetoothProfile.HEADSET);
                if (BluetoothProfile.STATE_CONNECTED == state) {
                    mHeadsetPlugListener.onHeadsetPlug(true);
                }
                if (BluetoothProfile.STATE_CONNECTED == state) {
                    mHeadsetPlugListener.onHeadsetPlug(false);
                }
            }
        } else if (Intent.ACTION_HEADSET_PLUG.equals(action)) {
            if (intent.hasExtra("state")) {
                if (intent.getIntExtra("state", 0) == 0) {
                    //外放
                    mHeadsetPlugListener.onHeadsetPlug(true);
                } else if (intent.getIntExtra("state", 0) == 1) {
                    //耳机
                    mHeadsetPlugListener.onHeadsetPlug(false);
                }
            }
        }
    }
 
    public interface HeadsetPlugListener {
        void onHeadsetPlug(boolean isPlug);//true说明没有耳机   false说明有耳机
    }
}

 

 

//耳机植入监听    1、具体使用的类调用
mHeadsetPlugReceiver = new HeadsetPlugReceiver(new HeadsetPlugReceiver.HeadsetPlugListener() {
    @Override
    public void onHeadsetPlug(boolean isPlug) {

// 接口回调        isPlug ----监听的状态
        if (isPlug) {
            if (BluetoothProfile.STATE_CONNECTED == adapter.getProfileConnectionState(BluetoothProfile.HEADSET)) {
                //蓝牙设备输出

              microSpeaker(context);
            } else if (BluetoothProfile.STATE_DISCONNECTED == adapter.getProfileConnectionState(BluetoothProfile.HEADSET)) {
                //外放

       loudSpeaker(context)
            } else {
                //外放

       loudSpeaker(context)
            }
        } else {
            //耳机输出

    microSpeaker(context)
        }
    }
});

// 2.注册广播 放在页面初始化的地方.
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_HEADSET_PLUG);
intentFilter.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
registerReceiver(mHeadsetPlugReceiver, intentFilter);

 

// 3.处理音频外放,还是当前耳机播放 

//外放
public void loudSpeaker(Activity context) {
    AudioManager audioManager = (AudioManager)context.getSystemService("audio");
    audioManager.setSpeakerphoneOn(true);
    context.setVolumeControlStream(0);
    audioManager.setMode(0);
}
 
//内放
public void microSpeaker(Activity context) {
    AudioManager audioManager = (AudioManager)context.getSystemService("audio");
    audioManager.setSpeakerphoneOn(false);
    context.setVolumeControlStream(0);
    audioManager.setMode(0);
}

 

https://blog.csdn.net/huangwenkui1990/article/details/94554305

更多相关文章

  1. android监听短信并判断是否未读
  2. android 监听其它app的错误或者崩溃的方法 (ProcessErrorStateInf
  3. OnclickListener与View.OnclickListener
  4. Android耳机按键监听
  5. Android(安卓)实现监听开机启动开启后台服务,并实现自动重启。
  6. android的Home键的监听封装工具类(一)
  7. android 音量获取和设置总结
  8. unity 关闭弹出android 提示框
  9. android 监听Home键和亮灭屏

随机推荐

  1. 动画:七分钟理解什么是KMP算法
  2. 推荐一个项目:数据结构和算法必知必会的 5
  3. 拓扑排序原理与解题套路
  4. 动画:什么是 BF 算法 ?
  5. 高考前一天,六月六号,加一!
  6. 前 K 个高频元素告诉你桶排序有啥用
  7. 看《长安十二时辰》可以了解哪些算法知识
  8. 你知道什么是漂亮排序法吗?哦,知道,不就是臭
  9. Hard 级别难度?桶排序几行代码搞定!
  10. 面试官,你再问我滑动窗口问题试试?我有解题