藍牙掃描等操做的所須要權限: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;
}