Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Android蓝牙开发教程(一)——搜索蓝牙设备[通俗易懂]

Android蓝牙开发教程(一)——搜索蓝牙设备[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-09-13 02:05:27
发布于 2022-09-13 02:05:27
6.4K10
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

Android蓝牙功能的开发一直是很多新手头疼的问题,网上虽然也有很多教程贴,但大多都写得不全面,不能让我们真正掌握蓝牙开发的基本知识。本教程主要讲解搜索蓝牙设备、蓝牙设备之间的连接和蓝牙之间的通讯三个主要模块。掌握了这三个,基本就能进行简单的蓝牙开发了。
先上效果图
界面比较简单。主要有三个按钮,两个文本和一个列表。三个按钮主要对应打开蓝牙,搜索设备和发送信息三个功能。两个文本主要用于提示连接状态和发送的消息以及获取的消息。列表主要展示搜索到的蓝牙设备。源码在后面会提供。
要用到蓝牙的功能,需要先在manifest中声明一下蓝牙的使用权限
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
打开蓝牙设备
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BluetoothAdapter bTAdatper = BluetoothAdapter.getDefaultAdapter();
if(bTAdatper==null){
            Toast.makeText(this,"当前设备不支持蓝牙功能",Toast.LENGTH_SHORT).show();
        }
        if(!bTAdatper.isEnabled()){
           /* Intent i = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivity(i);*/
            bTAdatper.enable();
        }
        //开启被其它蓝牙设备发现的功能
        if (bTAdatper.getScanMode() != BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
            Intent i = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
            //设置为一直开启
            i.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0);
            startActivity(i);
        }
开启蓝牙需要用到BluetoothAdapter,我们可以通过BluetoothAdapter.ACTION_REQUEST_ENABLE 提示用户开启,也可以bTAdatper.enable()直接开启蓝牙。
开启蓝牙后,需要设置蓝牙为可发现状态,让其他设备能够搜索到。

i.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0); 最后的参数设置为0,可以让蓝牙设备一直处于可发现状态。当我们需要设置具体可被发现的时间时,最多只能设置300秒。 i.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);

搜索蓝牙设备
成功开启蓝牙设备后,调用蓝牙适配器的startDiscovery方法就可以搜索附近可连接的蓝牙设备。另外我们可以调用cancelDiscovery()来取消搜索。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 mBluetoothAdapter.startDiscovery();
 mBluetoothAdapter.cancelDiscovery()
当我们开始搜索附近蓝牙设备的时候,系统会发出三个搜索状态的广播:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BluetoothAdapter.ACTION_DISCOVERY_STARTED、
BluetoothDevice.ACTION_FOUND、
BluetoothAdapter.ACTION_DISCOVERY_FINISHED

这三个分别对应开始搜索、搜索到设备、搜索结束。因此,我们可以定义一个广播,来获取这些状态。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                //避免重复添加已经绑定过的设备
                if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
                    //此处的adapter是列表的adapter,不是BluetoothAdapter
                    adapter.add(device);
                    adapter.notifyDataSetChanged();
                }
            } else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
                Toast.makeText(MainActivity.this,"开始搜索",Toast.LENGTH_SHORT).show();
            } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
                Toast.makeText(MainActivity.this,"搜索完毕",Toast.LENGTH_SHORT).show();
            }
        }
    };
在这里,我将搜索到的设备添加到列表中进行展示。

if (device.getBondState() != BluetoothDevice.BOND_BONDED) 系统会保存之前配对过的蓝牙设备,这里我们对搜索到的设备进行过滤,判断是否设备是否已经配对过。因此,我们还可以直接获取之前配对过的设备。

获取配对过的蓝牙设备
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Set<BluetoothDevice> pairedDevices = bTAdatper.getBondedDevices();
        if (pairedDevices.size() > 0) {
            for (BluetoothDevice device : pairedDevices) {
                adapter.add(device);
            }
        }
至此,我们就成功地获取到附近的蓝牙设备。
欢迎继续阅读下一篇

Android蓝牙开发教程(二)——连接蓝牙设备

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159847.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
请问一下adapter是什么类型?
请问一下adapter是什么类型?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
android蓝牙测试
注意点:在执行getBondedDevices时候会花费一点时间,一开始我不知道,“已配对”一直没出现,以为出错了。后来上了趟厕所回来发现就有了!!!!尴尬!
提莫队长
2019/02/21
1K0
Android蓝牙开发(一)之打开蓝牙和设备搜索
https://blog.csdn.net/huangliniqng/article/details/82185635
黄林晴
2019/01/10
2.4K0
Android蓝牙详析 | 蓝牙的适配、权限、开启、搜索发现等处理
本系列笔记概述 蓝牙传输优势:功耗低,传输距离还可以; 蓝牙聊天室案例 Android中蓝牙设备的使用 蓝牙权限(本文的讲解内容之一) 蓝牙功能开启(本文的讲解内容之一) 搜索蓝牙设备(本文的讲解内容之一) 与外设搭建RFCOMM通道(射频通道) 蓝牙设备双向数据传输 蓝牙聊天室案例框架 蓝牙权限 执行蓝牙通信需要权限BLUETOOTH, 例如:请求连接、接收连接和传输数据等; 如果需要启动设备 或 操作蓝牙设置,则需声明BLUETOOTH_ADMIN权限 <uses-permiss
凌川江雪
2019/05/17
6.6K0
[Android实例] android 蓝牙开发浅析
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
易寒
2021/12/21
5430
Android开发笔记(一百六十二)蓝牙设备的连接与配对
蓝牙是一种短距离无线通信技术,它由爱立信公司于1994年创制,原本想替代连接电信设备的数据线,但是后来发现它也能用于移动设备之间的数据传输,所以蓝牙技术在手机上获得了长足发展。 因为手机内部的通讯芯片一般同时集成了2G/3G/4G、WIFI和蓝牙,所以蓝牙功能已经是智能手机的标配了。若想进行蓝牙方面的开发,需要在App工程的AndroidManifest.xml中补充下面的权限配置:
aqi00
2019/01/18
3.4K0
Android 蓝牙开发(1)
Android 平台包含蓝牙网络堆栈支持,凭借此支持,设备能以无线方式与其他蓝牙设备交换数据。应用框架提供了通过 Android Bluetooth API 访问蓝牙功能的途径。使用 Bluetooth API Android 应用可以执行下面的操作:
开发者
2019/12/26
2.5K0
Android 蓝牙开发(一)蓝牙通信「建议收藏」
<uses-permissionandroid:name=”android.permission.BLUETOOTH” />
全栈程序员站长
2022/09/14
4.2K0
android开发之蓝牙主动配对连接手机
上一篇介绍了手机配对连接的三种方式,这篇以完整的一个代码实例介绍如何搜索周围的蓝牙设备,以及主动配对,连接。
全栈程序员站长
2022/03/11
7510
浅谈Bluetooth蓝牙开发
前言:项目用到蓝牙开发,具体蓝牙获取硬件传感器中的数据。 因为没有蓝牙开发的相关经验,决定先了解一些蓝牙开发的知识,再去看之前同事写的蓝牙相关代码。 --------------------------------------------------------------------------------------------------- 一、蓝牙开发相关类 1、BluetoothAdapter  显而易见,蓝牙适配器。  通过这个类我们进行以下操作: 1、开关蓝牙设备 2、扫描蓝牙设备 3、设置/
听着music睡
2018/05/18
1.5K0
Android 蓝牙开发,蓝牙连打印机。
1.添加jar包,在app目录下新建libs文件夹,拷入jar文件并Add As Library
yechaoa
2022/06/10
2.8K0
Android 蓝牙开发,蓝牙连打印机。
【Android 应用开发】BluetoothAdapter解析
这篇文章将会详细解析BluetoothAdapter的详细api, 包括隐藏方法, 每个常量含义. 
韩曙亮
2023/03/27
2.2K0
Android 蓝牙操作
该BluetoothAdapter可以执行基本的蓝牙任务,例如启动设备发现,查询配对的设备列表,使用已知的MAC地址实例化一个BluetoothDevice类,并创建一个BluetoothServerSocket监听来自其他设备的连接请求
码客说
2019/10/22
1.5K0
Android手机与vr交互暴风魔镜3D效果显示原理
首先讲到VR,谈谈个人体会,半年前看到淘宝上的vr眼镜盒为了促销标题图片都是非常性感的,还有海量你懂得资源。到最近在淘宝搜索vr暴风魔镜都正规了,而且销售量庞大 还有新闻上很多vr的科技前沿资讯可以看出来。vr技术随时间的流逝正在日益发展成熟,就像曾经的诺基亚到安卓,苹果。可以说vr技术现在还未成熟,但是具有强大的潜力价值。 ----眼睛的呈像原理: 人眼视觉的立体感和空间的距离感时如何产生的? 人有两只眼睛看到的事物有叠加的部分,而角度又不完全相同。两眼得到的是有细微差别的不同图像,在大脑中得到的图像就
李海彬
2018/03/22
2.2K0
Android手机与vr交互暴风魔镜3D效果显示原理
Android 蓝牙开发(扫描设备、绑定、解绑)
公司最近给我丢了一个蓝牙开发的项目,不了解怎么办呢,那当然是从最基础的开始了,所以这里相当于做笔记了。
晨曦_LLW
2020/09/25
4.9K0
android开发之手机与单片机蓝牙模块通信
之前两篇都是在说与手机的连接,连接方法,和主动配对连接,都是手机与手机的操作,做起来还是没问题的,但是最终的目的是与单片机的蓝牙模块的通信。
全栈程序员站长
2022/03/11
8120
蓝牙API介绍及基本功能实现
通过监听BluetoothAdapter.ACTION_STATE_CHANGED监听蓝牙状态的改变
fanfan
2022/05/07
1.5K0
Android 蓝牙开发(扫描设备、绑定、解绑)Kotlin版
之前写了一个蓝牙的小Demo,看的人还是有一些的,也有人私信我说,在学Kotlin,能不能出一版Kotlin的博客讲述这个蓝牙开发,这个想法还是不错的,不过就怕写了没有人看,因为在国内Kotlin是受众群体确实比较少,当然了也是有大的方向在往这边推动的,但是小公司依然不会去用Kotlin,如果你看不惯我这个说法也不要告诉我。我只是把这个博客当成是笔记而已,如果能在写作的时候帮助到别人也是乐意的,不能就自勉吧。
晨曦_LLW
2020/11/18
4.9K0
android 十八 蓝牙及Wi-Fi
蓝牙是一种重要的短距离无线通信技术,它被广泛应用于各种设备,比如计算机、手机、汽车等,支持设备之间的近距离通信,从而是数据传输更加快捷有效。Wi-Fi是一种高速的无线通信协议,它具有传输速度高,传输距离长的特点。通过WiFi,手机、PDA、电脑等移动设备可以以无线方式连接网络。本节中我们主要来学习Android开发中如何调用系统中蓝牙以及wifi的功能。
用户9184480
2024/12/17
1100
android 十八 蓝牙及Wi-Fi
Android4.42-Setting源码分析之蓝牙模块Bluetooth(下)
接着上一篇   Android4.42-Settings源码分析之蓝牙模块Bluetooth(上)
fanfan
2022/05/07
9620
相关推荐
android蓝牙测试
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验