前言
记录开发过程中连接安卓BLE设备在安卓4.4 ,5.1,及6.0以上碰到的问题, 设备包括蓝牙手环,蓝牙跳绳等,本文只简单记录设备的搜索问题,具体连接不做描述。
提示:以下是本篇文章正文内容,下面案例可供参考
一、开始使用
使用BLE在清单文件中加入:
<uses-feature
android:name="android.hardware.bluetooth_le"
android:required="true" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
二、App TargetSDK
1. (targetSDK <= 20)
不需要动态申请权限,在清单文件中加入上面权限即可
private void checkBLEFeature() {
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
Toast.makeText(this, "不支持蓝牙", Toast.LENGTH_SHORT).show();
}
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null){
Toast.makeText(this, "不支持蓝牙", Toast.LENGTH_SHORT).show();
return;
} else {
if (!bluetoothAdapter.isEnabled()) {
bluetoothAdapter.enable();
}
startScan();
}
}
public static void startScan(BluetoothAdapter.LeScanCallback callback) {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter == null) {
Log.w(TAG , " BluetoothAdapter is null");
return;
}
adapter.startLeScan(callback);
}
private BluetoothAdapter.LeScanCallback scanCallback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
}
};
scanRecord 参考链接: https://www.jianshu.com/p/0ba393afdafe
2. (20 < targetSDK <= 22)
不需要动态申请权限,在清单文件中加入上面权限即可
和上面的差别在于 Callback
public void startScan(BluetoothAdapter.LeScanCallback callback) {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter == null) {
return;
}
adapter.getBluetoothLeScanner().startScan(mLeScanCallback);
}
private static ScanCallback mLeScanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
super.onScanResult(callbackType, result);
iLog.i(TAG + " - onScanResult" + result.getDevice().getAddress());
}
@Override
public void onBatchScanResults(List<ScanResult> results) {
super.onBatchScanResults(results);
for (ScanResult sr : results) {
iLog.i(TAG + " - onBatchScanResults" + sr.toString());
}
}
@Override
public void onScanFailed(int errorCode) {
super.onScanFailed(errorCode);
errorCode共有下面4种情况:
errorCode=1;Fails to start scan as BLE scan with the same settings is already started by the app.
errorCode=2;Fails to start scan as app cannot be registered.
errorCode=3;Fails to start scan due an internal error
errorCode=4;Fails to start power optimized scan as this feature is not supported
}
};
3. (23 <=targetSDK)
使用时动态申请权限
Manifest.permission.ACCESS_COARSE_LOCATION
Manifest.permission.ACCESS_FINE_LOCATION
由于我们不是做手机APP的,我使用的系统是(Rockchip Rk3368_32bit Android 9, API 28) 平板设备,申请了权限也扫描不到,无奈只有把App 的targetSDK 改为22。
最后
如果你有好的解决办法欢迎留言私信,感谢!
|