蓝牙扫描等操做的所须要权限: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;
}