藍牙音箱的鏈接和斷開

藍牙掃描等操做的所須要權限:java

 

    <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.須要用到的類android

    public BluetoothAdapter bluetoothAdapter;
    private BluetoothA2dp bluetoothA2dp;

2.初始化app

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

  

3.監聽ide

    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.設置優先權this

  /**
     * 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();
        }
    }

 

5.斷開藍牙鏈接spa

 

  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.鏈接操做blog

 

    /**
     * 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. 獲取當前鏈接的藍牙設備get

    /**
     * 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;
    }
相關文章
相關標籤/搜索