Android BLE蓝牙使用 一
程序员文章站
2022-03-16 17:17:52
...
AndroidBle蓝牙开发
一 是否支持BLE蓝牙
private boolean isSupportBluetooth(boolean istoast) {
if (!this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
if (istoast) {
Toast.makeText(this, "你的设备不支持蓝牙", Toast.LENGTH_SHORT).show();
}
return false;
// ((MainActivity) context).finish();
}
final BluetoothManager bluetoothManager =
(BluetoothManager) this.getSystemService(Context.BLUETOOTH_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
mBluetoothAdapter = bluetoothManager.getAdapter();
}
// Checks if Bluetooth is supported on the device.
if (mBluetoothAdapter == null) {
if (istoast) {
Toast.makeText(this, "你的设备不支持Ble蓝牙", Toast.LENGTH_SHORT).show();
}
return false;
}
return true;
}
二 如果支持我们就注册广播接收器来接收我们需要的蓝牙数据,然后具体的蓝牙操作封装在MyBluetoothLeService里面 绑定服务 。最后 如果判断蓝牙是否开启 如果开启我们就进行蓝牙的扫描 ,扫描前 我们需要申请权限 这边我们用的是 EasyPermissions框架来请求权限 最后我们就开启扫描
/**
* 初始化蓝牙设备包括我们的打开蓝牙等操作
*/
private void initBluetooth() {
supportBluetooth = isSupportBluetooth(true);
if (supportBluetooth) {
//注册广播接收器
registerReceiver(mGattUpdateReceiver, makeGattUpdateIntentFilter());
Intent gattServiceIntent = new Intent(this, MyBluetoothLeService.class);
bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE);
if (mBluetoothAdapter.isEnabled()) {
if (EasyPermissions.hasPermissions(this, bluePermission)) {
startBluetoothSearch();
} else {
EasyPermissions.requestPermissions(this, "", Constant.REQUESTBLUETOOTHKEY, bluePermission);
}
} else {
initRequestOpenBluetooth();
}
}
}
/**
* 请求打开蓝牙设备
*/
private void initRequestOpenBluetooth() {
Intent mIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(mIntent, Constant.REQUESTTOOPENBLUE);
// 用enable()方法来开启,无需询问用户(无声息的开启蓝牙设备),这时就需要用到android.permission.BLUETOOTH_ADMIN权限。
// mBluetoothAdapter.enable();
}
/**
* 开启蓝牙扫描 蓝牙烧扫描需要停止这边通过延时来关闭我们的蓝牙扫描
*/
private void startBluetoothSearch() {
mBluetoothAdapter.startLeScan(this); // 下面扫描特定service的蓝牙设备
handler.sendEmptyMessageDelayed(0, delayMillis);//用来关闭我们的蓝牙扫描
//后面优化用的6以后就推荐用下面的方法搜索
/* if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mBluetoothAdapter.getBluetoothLeScanner().startScan(new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
super.onScanResult(callbackType, result);
}
@Override
public void onBatchScanResults(List<ScanResult> results) {
super.onBatchScanResults(results);
}
@Override
public void onScanFailed(int errorCode) {
super.onScanFailed(errorCode);
}
});
}*/
}
今天先分享BLE蓝牙是否支持和蓝牙是否开启以及蓝牙的扫描 这边 我们蓝牙的扫描 用的之前版本的在现在推荐使用上面注释掉的方法。 别忘记权限的申请和声明 BLE蓝牙需要定位权限 。
推荐阅读
-
Android中使用LayoutInflater要注意的一些坑
-
Android开发笔记之:一分钟学会使用Logcat调试程序的详解
-
详解Android Studio3.5及使用AndroidX的一些坑
-
Android编程使用加速度传感器实现摇一摇功能及优化的方法详解
-
Android Studio 通过一个登录功能介绍SQLite数据库的使用
-
Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法
-
Android使用补间动画做一个朴实无华的启动页
-
Android Material Design控件使用(一)——ConstraintLayout 约束布局
-
一些常用的android工具类及使用方法介绍
-
Android中使用LayoutInflater要注意的一些坑