Android gets Bluetooth connection device information and status

foreword

The recent app needs to use the Bluetooth function. Let's talk about how the Android app can obtain the Bluetooth information and connection status of the device.

Code

AndroidManifest.xml

AndroidManifest.xml needs to add the following permissions:

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

MainActivity.java

Obtain the Bluetooth information and connection status of the bound device in MainActivity (note: the method of obtaining the connection status is hidden and must be called through reflection), the following is the sample code:

 

package com.example.bluetoothtest;

import androidx.appcompat.app.AppCompatActivity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.os.Bundle;
import android.util.Log;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Set;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

		//获取BluetoothAdapter
        BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        showBondedDevice(bluetoothAdapter);
    }

    //获取已绑定设备信息和连接状态
    private void showBondedDevice(BluetoothAdapter bluetoothAdapter) {
        Set<BluetoothDevice> deviceList = bluetoothAdapter.getBondedDevices();
        for (BluetoothDevice device : deviceList) {
            Log.d("Jason", "Name:" + device.getName() + "   Mac:" + device.getAddress());

            try {
                //使用反射调用获取设备连接状态方法
                Method isConnectedMethod = BluetoothDevice.class.getDeclaredMethod("isConnected", (Class[]) null);
                isConnectedMethod.setAccessible(true);
                boolean isConnected = (boolean) isConnectedMethod.invoke(device, (Object[]) null);
                Log.d("Jason", "isConnected:" + isConnected);
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }
}

Guess you like

Origin blog.csdn.net/u013512708/article/details/119892002