蓝牙音箱的连接和断开

蓝牙扫描等操作的所需要权限:

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

  

1.需要用到的类

    public BluetoothAdapter bluetoothAdapter;
    private BluetoothA2dp bluetoothA2dp;

2.初始化

  bluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
  bluetoothA2dp.getProfileProxy(MainActivity.this, mListener, BluetoothProfile.A2DP); 

  

3.监听

    private BluetoothProfile.ServiceListener mListener = new BluetoothProfile.ServiceListener() {
        @Override
        public void onServiceDisconnected(int profile) {
            if (profile == BluetoothProfile.A2DP) {
                bluetoothA2dp = null;
            }
        }

        @Override
        public void onServiceConnected(int profile, BluetoothProfile proxy) {
            if (profile == BluetoothProfile.A2DP) {
                bluetoothA2dp = (BluetoothA2dp) proxy;
            }
        }
    };

4.设置优先权

  /**
     * bluetooth
     */
    public void setPriority(BluetoothDevice device, int priority) {
        try {
            Method connectMethod = BluetoothA2dp.class.getMethod("setPriority", BluetoothDevice.class, int.class);
            connectMethod.invoke(bluetoothA2dp, device, priority);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

扫描二维码关注公众号,回复: 2228892 查看本文章

5.断开蓝牙连接

  public static void disConnected(BluetoothDevice device,BluetoothA2dp bluetoothA2dp){
        try {
            Method connectMethod = BluetoothA2dp.class.getMethod("disconnect", BluetoothDevice.class);
            connectMethod.invoke(bluetoothA2dp, device);
        } catch (Exception e) {
            e.printStackTrace();
            Log.d("Tag", "closeProiority: "+e.toString());
        }
    }

6.配对

    private void pairBluetooth(BluetoothDevice device){
        Method createBond = null;
        try {
            createBond = BluetoothDevice.class.getMethod("createBond");
            createBond.invoke(device);
            //device.createBond();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  

7.连接操作

    /**
     * bluetooth 连接操作
     */
    private void connectA2dp(BluetoothDevice bluetoothDevice) {

        if (bluetoothA2dp == null || bluetoothDevice == null) {
            return;
        }
        setPriority(bluetoothDevice, 100);
        try {
            Method connectMethod = BluetoothA2dp.class.getMethod("connect", BluetoothDevice.class);
            connectMethod.invoke(bluetoothA2dp, bluetoothDevice);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

8. 获取当前连接的蓝牙设备

    /**
     * bluetooth    获取已经连接的蓝牙的信息
     */
    private BluetoothDevice getBluetoothConnectedDevice() {

        Class<BluetoothAdapter> bluetoothAdapterClass = BluetoothAdapter.class;//得到BluetoothAdapter的Class对象
        try {
            Method method = bluetoothAdapterClass.getDeclaredMethod("getConnectionState", (Class[]) null);
            //打开权限
            method.setAccessible(true);
            int state = (int) method.invoke(mBluetoothAdapter, (Object[]) null);
            if (state == BluetoothAdapter.STATE_CONNECTED) {
                Set<BluetoothDevice> devices = mBluetoothAdapter.getBondedDevices();
                for (BluetoothDevice device : devices) {
                    Method isConnectedMethod = BluetoothDevice.class.getDeclaredMethod("isConnected", (Class[]) null);
                    method.setAccessible(true);
                    boolean isConnected = (boolean) isConnectedMethod.invoke(device, (Object[]) null);
                    if (isConnected) {
                        //textViewBluetooth.append("当前连接的蓝牙信息:"+device.getName()+"\n");
                        return device;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

  

 

猜你喜欢

转载自www.cnblogs.com/galibujianbusana/p/9332376.html