文章目录

  • 前言
  • 一、获取安卓蓝牙权限
  • 二、搜索蓝牙
    • 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蓝牙的打开与搜索相关推荐

  1. Android蓝牙开发(一)蓝牙模块及核心API

    本文主要介绍Android蓝牙开发中基础知识:蓝牙模块及核心API. 关于蓝牙的连接及通讯功能实现,欢迎查阅下一篇文章:Android蓝牙开发(二)蓝牙消息传输实现. 蓝牙模块 从蓝牙4.0开始包含两 ...

  2. 【Bluetooth蓝牙开发】一、蓝牙开发入门

    一.蓝牙开发入门 文章目录 一.蓝牙开发入门 1.蓝牙概念 2.蓝牙发展历程 3.蓝牙技术概述 3.1 Basic Rate(BR) 3.2 Low Energy(LE) 4.常见蓝牙架构 4.1 S ...

  3. nimble 蓝牙开发一:BLE 蓝牙 Host 规范概述

    目录 nimble 蓝牙开发一:概述 一.BLE 简介 二.BLE 基础知识 蓝牙设备地址 BLE 广播类型 标准广播数据 三.BLE 工作概述 BLE 常见的操作有: BLE 常见的工作流程: 四. ...

  4. Android蓝牙开发前序知识-经典蓝牙低功耗蓝牙区别

    最近从网上搜了(抄了)一些经典蓝牙和低功耗蓝牙的区别.关于蓝牙的大概了解,前文已经描述过了. Android中的蓝牙 说到Android中的蓝牙,大家听到的可能有蓝牙1.0.蓝牙2.0.蓝牙3.0.蓝 ...

  5. 【Bluetooth|蓝牙开发】二、蓝牙开发入门

    个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! [所有文章汇总] 1.蓝牙基础概念 蓝牙,是一种利用低功率无线电,支持设备短距离通信的无线电 ...

  6. ##**iOS蓝牙开发(一)蓝牙相关基础知识**

    蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...

  7. Android 蓝牙开发(二) --手机与蓝牙音箱配对,并播放音频

    Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 上一章中,我们已经学习了传统蓝牙的开发,这一章,我们来学习如 ...

  8. 【蓝牙开发】Android BLE中广播包发射功率(TX power level)

    2022/01/02 输出! https://blog.csdn.net/love131452098/article/details/118486691 https://support.huawei. ...

  9. android蓝牙开发搜素,Android蓝牙开发(一)之打开蓝牙和设备搜索

    一.判断是否系统是否支持蓝牙 在使用蓝牙之前,我们首先要判断手机设备是否支持蓝牙,虽然现在基本都支持蓝牙了,但是为了代码的严谨性我们还是需要在代码中判断: private BluetoothManag ...

  10. 【Bluetooth蓝牙开发】三、蓝牙调试工具【集合汇总】

    文章目录 3.1.hciconfig 3.2.hcitool 3.3.hcidump 3.4.hciattach 3.5.btmon 3.6.bluetoothd 3.7.bluetoothctl

最新文章

  1. centos7 网卡配置vlan_【linux】Centos7单网卡多VLAN配置
  2. 中国大陆SCIE收录期刊分析:多少本刊?发文多少?解决了多大内卷?
  3. java学习之路--零碎的知识笔记
  4. 怎么用vc采集ni卡数据_SystemLink自学笔记(6):SystemLink架构和数据服务
  5. webpack 中的加载器简介||webpack 中加载器的基本使用——1. 打包处理 css 文件 2. 打包处理 less 文件 3.打包处理 scss 文件
  6. STM32串口在首次发送字符的时候,首字符丢失解决办法
  7. 推荐:李沐开源新作,一起来《动手学深度学习》
  8. Android local.properties 文件读取
  9. 岁月划过生命线(从0到阿里)
  10. Vue脚手架搭建简单步骤
  11. oracle左右结合,oracle中的左右连接
  12. css3制作俩面翻转盒子效果
  13. Matlab 用sort函数排序 二维数组
  14. java clone()用法_java clone方法使用详解(转)
  15. Linux scp命令复制文件报错: not a regular file
  16. R 回归 虚拟变量na_【R语言进阶】Logistic回归及哑变量设置
  17. java实现角色+武器攻击小游戏
  18. Allegro PCB的5种形状Symbol类型
  19. 显示隐藏Html元素(div等)
  20. 申论公文题-总结类-1

热门文章

  1. OpenCV—Python 对比度与亮度调整
  2. 2022年全球光纤连接市场将达50.1亿美元
  3. 谷歌和有道翻译API使用
  4. 物料主数据 分类视图导入 BAPI_OBJCL_CREATE
  5. 省钱第一步,华为云为您服务|和车神哥一起薅羊毛
  6. mac下安装homebrew两三句话
  7. 京东面试官总结2020京东Java面试题,让你轻松拿下offer!
  8. 深圳Java学习:面向对象【重点知识】
  9. 使命 愿景 价值观_公开发展您的使命或价值观的4个关键
  10. 全新MXone Pro自适应苹果CMSV10影视模板/亲测