安卓BLE蓝牙开发总结(一):BLE蓝牙的打开与搜索
文章目录
- 前言
- 一、获取安卓蓝牙权限
- 二、搜索蓝牙
- 1.布置控件
- 2.初始化控件并获取蓝牙适配器
- 3.检测蓝牙并打开蓝牙
- 4.搜索蓝牙
- 总结
前言
因为学习开发需要,最近学习BLE蓝牙的开发,总结了一下流程并说一下遇到的坑,这篇主要是安卓7.0以上的方法
一、获取安卓蓝牙权限
在AndroidManifest里面添加权限。
<uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
二、搜索蓝牙
1.布置控件
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/bt_search"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="搜索" /><TextViewandroid:id="@+id/tv_status"android:layout_width="match_parent"android:layout_height="35dp"android:text="未连接" /><ListViewandroid:id="@+id/list_devicces"android:layout_width="match_parent"android:layout_height="400dp"></ListView></LinearLayout></androidx.appcompat.widget.LinearLayoutCompat>
2.初始化控件并获取蓝牙适配器
public void initView(){//新版本的可以直接通过BluetoothAdapter获取,旧版本可能需要通过BluetoothManager;mAdapter = BluetoothAdapter.getDefaultAdapter();Button search = findViewById(R.id.bt_search);//搜索按钮search.setOnClickListener(this);tv_status = findViewById(R.id.tv_status);//状态栏tv_status.setOnClickListener(this);devices = findViewById(R.id.list_devicces);//搜索到的蓝牙列表devices.setOnItemClickListener(a);//这里的a绑定的是列表的item的监听,后面连接用的}
3.检测蓝牙并打开蓝牙
//首先判断是否支持蓝牙
if (!mAdapter.isEnabled()){Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(intent, 1);//这里是通过询问是否打开蓝牙
}
//也可以直接隐性打开
if (!mAdapter.isEnabled()){mAdapter.enable();
}
4.搜索蓝牙
1.ScanCallback回调函数 通过回调获取搜索到的结果
private ScanCallback callback = new ScanCallback() {@SuppressLint("HandlerLeak")@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)@Overridepublic void onScanResult(int callbackType, ScanResult result//扫描结果) {super.onScanResult(callbackType, result);BluetoothDevice bluetoothDevice= result.getDevice();//获取扫描到的设备Log.d("TAG", "onScanResult: "+result.getDevice().getAddress());//显示获取到的设备mac地址//通过caontains方法,过滤已添加的deviceif (!deviceList.contains(bluetoothDevice) && bluetoothDevice.getName() != null) {//通过两个List<>存储扫描到的信息deviceList.add(bluetoothDevice);//deviceList存放蓝牙设备deviceAll.add(bluetoothDevice.getName() + " : " + bluetoothDevice.getAddress());// deviceAll存放蓝牙设备信息Log.d("TAG1", "onLeScan: " + deviceList);ArrayAdapter devicesAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, deviceAll);devices.setAdapter(devicesAdapter);}};};
2.设置点击事件,开始搜索。
@Overridepublic void onClick(View v) {switch (v.getId()) {//开始搜索case R.id.bt_search:Thread scanThread = new Thread(new Runnable() {@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)@Overridepublic void run() {deviceList.clear(); //重新搜索前把之前存储的设备信息清空mAdapter.getBluetoothLeScanner().startScan(callback);//这里的callback就是ScanCallbak实例对象}});scanThread.start();tv_status.setText("正在扫描");break;}}
到这里搜索BLE蓝牙就完成了
总结
这里会遇到一个API版本不符的Android lint问题,可以在函数前面加一个。
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
//清除所有版本Api的Andrroid lint问题
一: 安卓BLE蓝牙开发总结(二):BLE蓝牙的连接
三: 安卓BLE蓝牙开发总结(三):接受和传输数据:BLE蓝牙的连接
安卓BLE蓝牙开发总结(一):BLE蓝牙的打开与搜索相关推荐
- Android蓝牙开发(一)蓝牙模块及核心API
本文主要介绍Android蓝牙开发中基础知识:蓝牙模块及核心API. 关于蓝牙的连接及通讯功能实现,欢迎查阅下一篇文章:Android蓝牙开发(二)蓝牙消息传输实现. 蓝牙模块 从蓝牙4.0开始包含两 ...
- 【Bluetooth蓝牙开发】一、蓝牙开发入门
一.蓝牙开发入门 文章目录 一.蓝牙开发入门 1.蓝牙概念 2.蓝牙发展历程 3.蓝牙技术概述 3.1 Basic Rate(BR) 3.2 Low Energy(LE) 4.常见蓝牙架构 4.1 S ...
- nimble 蓝牙开发一:BLE 蓝牙 Host 规范概述
目录 nimble 蓝牙开发一:概述 一.BLE 简介 二.BLE 基础知识 蓝牙设备地址 BLE 广播类型 标准广播数据 三.BLE 工作概述 BLE 常见的操作有: BLE 常见的工作流程: 四. ...
- Android蓝牙开发前序知识-经典蓝牙低功耗蓝牙区别
最近从网上搜了(抄了)一些经典蓝牙和低功耗蓝牙的区别.关于蓝牙的大概了解,前文已经描述过了. Android中的蓝牙 说到Android中的蓝牙,大家听到的可能有蓝牙1.0.蓝牙2.0.蓝牙3.0.蓝 ...
- 【Bluetooth|蓝牙开发】二、蓝牙开发入门
个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! [所有文章汇总] 1.蓝牙基础概念 蓝牙,是一种利用低功率无线电,支持设备短距离通信的无线电 ...
- ##**iOS蓝牙开发(一)蓝牙相关基础知识**
蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...
- Android 蓝牙开发(二) --手机与蓝牙音箱配对,并播放音频
Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 上一章中,我们已经学习了传统蓝牙的开发,这一章,我们来学习如 ...
- 【蓝牙开发】Android BLE中广播包发射功率(TX power level)
2022/01/02 输出! https://blog.csdn.net/love131452098/article/details/118486691 https://support.huawei. ...
- android蓝牙开发搜素,Android蓝牙开发(一)之打开蓝牙和设备搜索
一.判断是否系统是否支持蓝牙 在使用蓝牙之前,我们首先要判断手机设备是否支持蓝牙,虽然现在基本都支持蓝牙了,但是为了代码的严谨性我们还是需要在代码中判断: private BluetoothManag ...
- 【Bluetooth蓝牙开发】三、蓝牙调试工具【集合汇总】
文章目录 3.1.hciconfig 3.2.hcitool 3.3.hcidump 3.4.hciattach 3.5.btmon 3.6.bluetoothd 3.7.bluetoothctl
最新文章
- centos7 网卡配置vlan_【linux】Centos7单网卡多VLAN配置
- 中国大陆SCIE收录期刊分析:多少本刊?发文多少?解决了多大内卷?
- java学习之路--零碎的知识笔记
- 怎么用vc采集ni卡数据_SystemLink自学笔记(6):SystemLink架构和数据服务
- webpack 中的加载器简介||webpack 中加载器的基本使用——1. 打包处理 css 文件 2. 打包处理 less 文件 3.打包处理 scss 文件
- STM32串口在首次发送字符的时候,首字符丢失解决办法
- 推荐:李沐开源新作,一起来《动手学深度学习》
- Android local.properties 文件读取
- 岁月划过生命线(从0到阿里)
- Vue脚手架搭建简单步骤
- oracle左右结合,oracle中的左右连接
- css3制作俩面翻转盒子效果
- Matlab 用sort函数排序 二维数组
- java clone()用法_java clone方法使用详解(转)
- Linux scp命令复制文件报错: not a regular file
- R 回归 虚拟变量na_【R语言进阶】Logistic回归及哑变量设置
- java实现角色+武器攻击小游戏
- Allegro PCB的5种形状Symbol类型
- 显示隐藏Html元素(div等)
- 申论公文题-总结类-1