1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > android连接和断开蓝牙音箱的问题

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

时间:2024-05-18 21:00:50

相关推荐

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() {@Overridepublic void onServiceDisconnected(int profile) {if(profile == BluetoothProfile.A2DP){mBluetoothA2dp = null;}else if(profile == BluetoothProfile.HEADSET){bluetoothHeadset = null;}}@Overridepublic 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); //设置prioritytry {//通过反射获取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 ,那么也可以断开蓝牙,但是你再连接其他蓝牙音箱后,可能会出现两个音箱都是连接状态,只不过一个在播放音乐一个没有播放,重启设备后自动连接上的蓝牙音箱也并不一定是关机前正在播放的)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。