android连接和断开蓝牙音箱的问题

1.首先设置获取各种代理

		defaultAdapter = BluetoothAdapter.getDefaultAdapter();
        //获取A2DP代理对象
        defaultAdapter.getProfileProxy(mContext, mListener, BluetoothProfile.A2DP);
        //获取HEADSET代理对象
        defaultAdapter.getProfileProxy(mContext, mListener, BluetoothProfile.HEADSET);
private BluetoothProfile.ServiceListener mListener = new BluetoothProfile.ServiceListener() {
        @Override
        public void onServiceDisconnected(int profile) {
            if(profile == BluetoothProfile.A2DP){
                mBluetoothA2dp = null;
            }else if(profile == BluetoothProfile.HEADSET){
                bluetoothHeadset = null;
            }
        }
        @Override
        public void onServiceConnected(int profile, BluetoothProfile proxy) {
            if(profile == BluetoothProfile.A2DP){
                mBluetoothA2dp = (BluetoothA2dp) proxy; //转换
                connectedBluetooth();//得到连接设备
            }else if(profile == BluetoothProfile.HEADSET){
                bluetoothHeadset = (BluetoothHeadset) proxy;
            }
        }
    };

2.连接一个蓝牙的时候需要断开其他的蓝牙

List<BluetoothDevice> connectedDevices = mBluetoothA2dp.getConnectedDevices();
if (connectedDevices != null && connectedDevices.size() > 0) {
    for (BluetoothDevice bluetoothDevice2 : connectedDevices) {
          BluetoothUtils.disConnectA2dp(bluetoothDevice2, mBluetoothA2dp);
          BluetoothUtils.disConnectHeadset(bluetoothDevice2, bluetoothHeadset);
    }
}
BluetoothUtils.connectA2dp(device,mBluetoothA2dp);

连接跟断开连接的方法

 /**
     * 连接蓝牙设备
     *
     * @param device
     * @param mA2dp
     */
    public static boolean connectA2dp(BluetoothDevice device, BluetoothA2dp mA2dp) {
        boolean state = false;
        if (mA2dp == null) {
            return false;
        }
        setPriority(device, 100, mA2dp); //设置priority
        try {
            //通过反射获取BluetoothA2dp中connect方法(hide的),进行连接。
            Method connectMethod = BluetoothA2dp.class.getMethod("connect",
                    BluetoothDevice.class);
            state = (boolean) connectMethod.invoke(mA2dp, device);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return state;
    }

    /**
     * 断开 A2dp 连接
     *
     * @param device 设备
     * @param mA2dp
     */
    public static boolean disConnectA2dp(BluetoothDevice device, BluetoothA2dp mA2dp) {
        if (mA2dp == null) {
            return false;
        }
        setPriority(device, 0, mA2dp);
        boolean connect = false;
        try {
            //通过反射获取BluetoothA2dp中connect方法(hide的),断开连接。
            Method connectMethod = BluetoothA2dp.class.getMethod("disconnect", BluetoothDevice.class);
            connect = (boolean) connectMethod.invoke(mA2dp, device);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return connect;

    }

    /**
     * 断开 Headset 连接
     * @param bluetoothDevice
     * @param bluetoothHeadset
     * @return
     */
    public static boolean disConnectHeadset(BluetoothDevice bluetoothDevice, BluetoothHeadset bluetoothHeadset) {
        if (bluetoothHeadset == null) {
            return false;
        }
        boolean result = false;
        setHeadsetPriority(bluetoothDevice, 0, bluetoothHeadset);
        try {
            result = ((Boolean) BluetoothHeadset.class.getMethod("disconnect", new Class[]{BluetoothDevice.class}).invoke(bluetoothHeadset, new Object[]{bluetoothDevice})).booleanValue();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return result;
    }

    public static void setHeadsetPriority(BluetoothDevice bluetoothDevice, int i, BluetoothHeadset bluetoothHeadset) {
        try {
            BluetoothHeadset.class.getMethod("setPriority", new Class[]{BluetoothDevice.class, Integer.TYPE}).invoke(bluetoothHeadset, new Object[]{bluetoothDevice, Integer.valueOf(i)});
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    /**
     * 设置优先级
     *
     * @param device   设备
     * @param priority 优先级
     * @param mA2dp
     */
    public static void setPriority(BluetoothDevice device, int priority, BluetoothA2dp mA2dp) {
        try {//通过反射获取BluetoothA2dp中setPriority方法(hide的),设置优先级
            Method connectMethod = BluetoothA2dp.class.getMethod("setPriority",
                    BluetoothDevice.class, int.class);
            connectMethod.invoke(mA2dp, device, priority);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

(注:发现如果只是代理了BluetoothA2dp,没有代理BluetoothHeadset ,那么也可以断开蓝牙,但是你再连接其他蓝牙音箱后,可能会出现两个音箱都是连接状态,只不过一个在播放音乐一个没有播放,重启设备后自动连接上的蓝牙音箱也并不一定是关机前正在播放的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值