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