文档章节

Android 蓝牙相关的广播

coderminer
 coderminer
发布于 2016/11/10 11:23
字数 795
阅读 87
收藏 1
点赞 0
评论 0

Android 蓝牙相关的广播

监听蓝牙相关的广播并获得相关的信息,蓝牙相关的广播主要集中在BluetoothAdapterBluetoothDevice类中, 可以通过在AndroidManifest.xml中注册静态广播,也可以通过在代码中注册动态广播,两种形式的广播都可以监听到 需要相关的权限

<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

蓝牙开关状态的广播

蓝牙的开关状态

int STATE_OFF = 10; //蓝牙关闭
int STATE_ON = 12; //蓝牙打开
int STATE_TURNING_OFF = 13; //蓝牙正在关闭
int STATE_TURNING_ON = 11; //蓝牙正在打开

对应的广播

String ACTION_STATE_CHANGED = "android.bluetooth.adapter.action.STATE_CHANGED"

监听到这个广播之后,通过intent中的EXTRA_STATE获取对应的状态值

int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,BluetoothAdapter.STATE_OFF);

打开蓝牙的广播

可以通过广播调用系统的activity来打开蓝牙,对应的广播

String ACTION_REQUEST_ENABLE = "android.bluetooth.adapter.action.REQUEST_ENABLE";
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

执行这个广播之后,可以通过监听广播ACTION_STATE_CHANGED,来判断蓝牙是否打开

蓝牙扫描的广播

打开蓝牙之后,可以通过方法startDiscovery(),来扫描设备周边可以使用的其他的蓝牙设备,这个方法会触发下面的广播

String ACTION_DISCOVERY_STARTED = "android.bluetooth.adapter.action.DISCOVERY_STARTED";  //开始扫描
String ACTION_DISCOVERY_FINISHED = "android.bluetooth.adapter.action.DISCOVERY_FINISHED"; //扫描结束

如果扫描到可用的设备,还会触发广播

String ACTION_FOUND = "android.bluetooth.device.action.FOUND" //属于类 `BluetoothDevice`

注意在6.0之后的设备,如果想监听这个广播,还必须添加权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

在应用中申请

ActivityCompat.requestPermissions(this,new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION,
              android.Manifest.permission.ACCESS_FINE_LOCATION},2);

不然在6.0之后的设备中监听不到这个广播

监听到广播ACTION_FOUND,可用获得设备相关的信息

BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
String name = device.getName();
String addr = device.getAddress();
//还有其他相关的信息

获得设备的UUID的广播

在扫描到设备之后,可用调用方法fetchUuidsWithSdp(),调用这个方法会触发这个广播

String ACTION_UUID = "android.bluetooth.device.action.UUID";

通过intent中的EXTRA_UUID,获取设备的UUID

Parcelable[] uuidExtra = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID);
for (int i=0; i<uuidExtra.length; i++) {
     String uuid = uuidExtra[i].toString();
}

蓝牙配对的广播

有蓝牙设备的配对请求时,会监听到这个广播

String ACTION_PAIRING_REQUEST = "android.bluetooth.device.action.PAIRING_REQUEST";

蓝牙配对状态的广播

在进行配对时,可用通过监听配对的状态判断设备是否已经配对成功 配对的状态值

int BOND_NONE = 10; //配对没有成功
int BOND_BONDING = 11; //配对中
int BOND_BONDED = 12; //配对成功

广播

String ACTION_BOND_STATE_CHANGED = "android.bluetooth.device.action.BOND_STATE_CHANGED";

获取值

int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_NONE); //当前的配对的状态
int state = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.BOND_NONE); //前一次的配对状态
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); //配对的设备信息

蓝牙连接状态的广播

配对之后,连接设备可以通过监听下面的广播,判断设备是否连接成功

连接的状态值

int STATE_DISCONNECTED = 0; //未连接
int STATE_CONNECTING = 1; //连接中
int STATE_CONNECTED = 2; //连接成功

广播

String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED";

获取值

int state = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE, BluetoothAdapter.ERROR); //当前的连接状态
int state = intent.getIntExtra(BluetoothAdapter.EXTRA_PREVIOUS_CONNECTION_STATE, BluetoothAdapter.ERROR); //前一次的连接状态
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); //连接的设备信息

蓝牙设备的名字变化的广播

String ACTION_LOCAL_NAME_CHANGED = "android.bluetooth.adapter.action.LOCAL_NAME_CHANGED" ; //本地设备的蓝牙设备的名称变化 `BluetoothAdapter`
String ACTION_NAME_CHANGED = "android.bluetooth.device.action.NAME_CHANGED" ;// 远程设备的名称的变化 `BluetoothDevice`

© 著作权归作者所有

共有 人打赏支持
coderminer
粉丝 1
博文 14
码字总数 7925
作品 0
海淀
Android蓝牙库-FastBle的简易使用

发布自Kindem的博客,欢迎大家转载,但是要注意注明出处 最近在做物联网课设,过程中需要用到Android的蓝牙API,奈何原生的蓝牙API使用有点麻烦。于是上网搜索看有没有好用的Android蓝牙库,...

Kindem ⋅ 05/25 ⋅ 0

Android实现蓝牙耳机连接

前言 最近看了下蓝牙耳机连接的问题,查阅了相关资料,再此做一个总结。 本文参考以下链接: Android实现主动连接蓝牙耳机 再次对作者表示感谢。 今天涉及的内容有: 流程讲解 新建广播Bluet...

奔跑的佩恩 ⋅ 05/19 ⋅ 0

Android开发权威指南(第2版)新书发布

《Android开发权威指南(第二版)》是畅销书《Android开发权威指南》的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45章精彩内容供读者学习。  《Android开发权威指...

androidguy ⋅ 2013/09/05 ⋅ 0

android -------- 蓝牙Bluetooth

什么是蓝牙? 也可以说是蓝牙技术。所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的。利用“蓝牙”技术,能够有效地简化掌上电脑、笔记本电脑和移动电话手...

切切歆语 ⋅ 04/17 ⋅ 0

仓库pda app开发,android系统

任务描述: 仓库pda app开发android系统,我方出接口 开发周期: 1.兼职时间:20~30个工作日。 2.兼职人员要求深圳地区,坐班 人员要求: 1. 两年以上Android开发经验。 2. 沟通能力较强 3....

封生 ⋅ 05/16 ⋅ 0

andriod-四大组件之广播Broadcast-短信的收发

我想几乎所有的安卓开发者,第一个接触到的四大组件之一就是activity,而我在之前的文章中也写过, 在activity里面getContext是大佬级别的存在(可以看前几章), 那么四大组件中的广播Broad...

九尾74 ⋅ 05/24 ⋅ 0

Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)

一、前言 app在线更新是一个比较常见需求,新版本发布时,用户进入我们的app,就会弹出更新提示框,第一时间更新新版本app。在线更新分为以下几个步骤: 在线更新就上面几个步骤,前2步比较简...

codeGoogle ⋅ 04/28 ⋅ 0

详细解析BluetoothAdapter

一 BluetoothAdapter简介 1.继承关系 该类仅继承了Object类; 2.该类作用 BluetoothAdapter代表了移动设备的本地的蓝牙适配器, 通过该蓝牙适配器可以对蓝牙进行基本操作, 例如 : 启动设备发现...

我叫leo- ⋅ 2016/04/26 ⋅ 0

Windows 10 新功能 Nearby Share 支持 Android 、iOS

Windows 10 April Update 中引入了诸多新功能,其中一项功能是 Nearby Share/Near Share,它可让用户轻松地将文件从一台 Windows 10 PC 传输到另一台,在 Build 2018 大会上,微软确认该功能...

雨田桑 ⋅ 05/15 ⋅ 0

关于使用AlarmManager的注意事项

最近在做一个需求:客户端按照规定的时间间隔向服务端发送定位。一看到这个需求就想到了使用 来实现。 经常被用来执行定时任务,比如设置闹铃、发送心跳包等。也许有人会有疑问:为什么不能使...

hejunbinlan ⋅ 06/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

微信小程序接口文档

API接口文档:http://developers.weixin.qq.com/miniprogram/dev/api/

熊二的爸爸是谁 ⋅ 32分钟前 ⋅ 0

优先考虑类型安全的异构容器(29)

1、泛型常用于集合(Set、Map)以及单元素容器(ThreadLocal、AtomicReference) 被参数化的容器:只能有固定数目的类型参数 2、Class 类在jdk 1.5 之后被泛型化了 String.class 属于Class<S...

职业搬砖20年 ⋅ 40分钟前 ⋅ 0

Linux下date格式化

最近在编辑一个脚本时,发现对Linux下时间的命令理解的不是很透彻,看到一篇关于date时间格式化的文章,遂摘录了下来。 本文取自:Linux下date命令,格式化输出,时间设置 一、date命令 [ro...

blackfoxya ⋅ 41分钟前 ⋅ 0

动手---sbt (1)

1:https://github.com/ucb-bar/chisel3 下载源码 2:Chisel-Tutorial文件夹下的readme.md文件中有说明: a)需要先测试是否安装了sbt并做一个hello工程 joe@joe-Aspire-Z3730:/media/sdb4/dow...

whoisliang ⋅ 43分钟前 ⋅ 0

Micropython实例之TPYBoardv102位数码管显示实验

import pybfrom pyb import Pin #数码管a~g dp对应的开发板引脚d_Pins=[Pin(i,Pin.OUT_PP) for i in ['X1','X2','X3','X4','X5','X6','X7','X8']]#数码管位段1 2 3 4对应的引脚w...

bodasisiter ⋅ 45分钟前 ⋅ 0

Java WebService接口生成和调用 图文详解

webservice简介: Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所...

Dylan1009 ⋅ 50分钟前 ⋅ 0

iOS类大小的测量

iOS中,测量类的大小可以用函数malloc_size (头文件#import <malloc/malloc.h>) 比如我们新建一个继承与object的类 代码: testObjest *test = [testObjest alloc]; NSLog(@"-----%...

RainOrz ⋅ 50分钟前 ⋅ 0

android支付宝首页、蚂蚁森林效果、视频背景、校园电台、载入收缩动画等源码

Android精选源码 android实现蚂蚁森林效果源码 android仿支付宝首页应用管理(拖拽排序,添加删除) android校园网络电台客户端源码 android实现按钮伸缩效果源码 一款仿iOS的PickerView控件,...

逆鳞龙 ⋅ 57分钟前 ⋅ 0

阿里云Apsara Block Storage企业级分布式块存储产品

摘要: Apsara Block Storage是阿里云推出的一款企业级分布式块存储产品,帮助企业市场头部客户构建高性能、弹性、可靠的大规模横向扩展云存储服务平台。可对接各种类型计算平台,包括阿里云...

阿里云云栖社区 ⋅ 今天 ⋅ 0

spring AOP

1. 添加MAVEN <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> <dependency> <groupId>org.springframework</groupId> <artifactId>sprin......

BobwithB ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部