藍牙Android 4.0低耗開發兼容穩定性問題解決方式
可以在 www.IOTSDK.com 下載一個SDK,解決~!
android4.2以上藍牙開發穩定兼容Samsung BLE SDK、Broadcom BLE SDK、Google BLE SDK
1. 拷貝依賴庫
將如下 jar 包拷貝到 libs 目錄下:
- blelibrary-0.1.jar
- com.broadcom.bt.jar
- commons-codec-1.8.jar
- samsung_ble_sdk_200.jar </ul>
2. 添加權限
在 AndroidManifest.xml 中添加如下權限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
3. 添加 Service
在 AndroidManifest.xml 中添加如 Service
<application>
...
<service
android:name="com.xtremeprog.sdk.ble.BleService"
android:enabled="true" />
...
</application>
4. 綁定 BLE service 并接收廣播
在需要使用 BLE 通訊的 Activity 中(或者寫在 Application 中),添加 bind service 的代碼:
protected BleService mService;
protected IBle mBle;
...
private final BroadcastReceiver mBleReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
String action = intent.getAction();
// 4. 處理 service 發過來的廣播
// 發現設備
if (BleService.BLE_DEVICE_FOUND.equals(action)) {
BluetoothDevice device = extras
.getParcelable(BleService.EXTRA_DEVICE);
byte[] scanRecord = extras
.getByteArray(BleService.EXTRA_SCAN_RECORD);
return;
}
// 設備已連接
if (BleService.BLE_GATT_CONNECTED.equals(action)) {
BluetoothDevice device = extras
.getParcelable(BleService.EXTRA_DEVICE);
return;
}
// 發現設備服務
if (BleService.BLE_SERVICE_DISCOVERED.equals(action)) {
String address = extras
.getParcelable(BleService.EXTRA_ADDR);
ArrayList<BleGattService> services = mBle.getServices(address);
return;
}
}
};
private final ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className,
IBinder rawBinder) {
// 1. 綁定 service 成功,獲取 mBle 對象
mService = ((BleService.LocalBinder) rawBinder).getService();
mBle = mService.getBle();
}
@Override
public void onServiceDisconnected(ComponentName classname) {
mService = null;
mBle = null;
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
...
// 0. 綁定 service
Intent bindIntent = new Intent(this, BleService.class);
bindService(bindIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onResume() {
super.onResume();
// 3. 接受 service 發送的廣播
registerReceiver(mBleReceiver, BleService.getIntentFilter());
}
@Override
protected void onPause() {
super.onPause();
// 5. 停止接收廣播
unregisterReceiver(mBleReceiver);
}
5. BLE 操作
所有 BLE 的操作都通過調用 IBle 對象的 requestXXX 來實現,調用的結果在廣播中返回,
// 請求連接
mBle.requestConnect(address);
// 讀取 characteristic
List<BleGattCharacteristic> gattCharacteristics = gattService.getCharacteristics();
mBle.requestReadCharacteristic(address, gattCharacteristics.get(1));
// 寫入 characteristic
public static final UUID CHARACTER_COMMON_WRITE = UUID
.fromString("00008a81-0000-1000-8000-00805f9b34fb");
BleGattCharacteristic characteristic = deviceSerivce
.getCharacteristic(CHARACTER_COMMON_WRITE);
characteristic.setValue(new byte[] {0x00});
mBle.requestWriteCharacteristic(address, characteristic, "");
// 接收 notification
mBle.requestCharacteristicNotification(address, characteristic)
本文由用戶 Xtremeprog 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!