Android 蓝牙相关的广播

Android 蓝牙相关的广播

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

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

蓝牙开关状态的广播

蓝牙的开关状态

1int STATE_OFF = 10; //蓝牙关闭 2int STATE_ON = 12; //蓝牙打开 3int STATE_TURNING_OFF = 13; //蓝牙正在关闭 4int 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来打开蓝牙,对应的广播

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

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

蓝牙扫描的广播

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

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

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

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

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

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

在应用中申请

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

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

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

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

获得设备的UUID的广播

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

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

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

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

蓝牙配对的广播

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

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

蓝牙配对状态的广播

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

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

广播

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

获取值

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

蓝牙连接状态的广播

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

连接的状态值

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

广播

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

获取值

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

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

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

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

layim的websocket消息撤回功能实现

我的大概思路就是,前端根据选取的内容获得他的cid,我的cid是js生成的uuid,然后:1、通过websocket广播给对应的人去删除localstorage里的缓存,2、ajax异步请求删除数据库里的数据记录3、如果对方此时也打开了聊天面板就要用jquery找到那条消息然后remove。由于目前发现layim3.6版本并没有给自己

Android 蓝牙相关的广播 - HelloWorld