bluetooth-蓝牙事件监听
今天在做项目的时候,需要监听一个蓝牙耳机的连接状态。就写了一个小的测试方法。记录如下
看代码
这要处理的是蓝牙监听事件

package com.example.alert; import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothHeadset;
import android.bluetooth.BluetoothProfile;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast; public class HeadsetPlugReceiver extends BroadcastReceiver { @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
if (action.equals(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED)) {
Log.e("123", "BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED");
} else if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
Log.e("123", "BluetoothAdapter.ACTION_STATE_CHANGED");
int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1); switch (state) {
case BluetoothAdapter.STATE_OFF:
Log.e("123", "BluetoothAdapter.STATE_OFF");
break;
case BluetoothAdapter.STATE_TURNING_ON: Log.e("123", "BluetoothAdapter.STATE_TURNING_ON");
break;
case BluetoothAdapter.STATE_ON:
Log.e("123", "BluetoothAdapter.STATE_ON"); break;
case BluetoothAdapter.STATE_TURNING_OFF:
Log.e("123", "BluetoothAdapter.STATE_TURNING_OFF");
break;
} } else if (action
.equals(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED)) {
Log.e("123", "BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED");
int state = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, -1); switch (state) {
case BluetoothProfile.STATE_DISCONNECTED:
Log.e("123", "BluetoothProfile.STATE_DISCONNECTED");
break;
case BluetoothProfile.STATE_CONNECTING:
Log.e("123", "BluetoothProfile.STATE_CONNECTING"); break;
case BluetoothProfile.STATE_CONNECTED:
Log.e("123", "BluetoothProfile.STATE_CONNECTED"); break;
case BluetoothProfile.STATE_DISCONNECTING:
Log.e("123", "BluetoothProfile.STATE_DISCONNECTING"); break;
} } } }

蓝牙的监听,需要加入权限,如下
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
下面是我们打印的结果
1.没有蓝牙耳机连接的情况下
蓝牙从断开到连接
1 09-21 11:45:27.223: E/123(15118): BluetoothAdapter.ACTION_STATE_CHANGED
2 09-21 11:45:27.223: E/123(15118): BluetoothAdapter.STATE_TURNING_ON
3 09-21 11:45:27.707: E/123(15118): BluetoothAdapter.ACTION_STATE_CHANGED
4 09-21 11:45:27.708: E/123(15118): BluetoothAdapter.STATE_ON
从连接到断开
1 09-21 11:49:09.126: E/123(15118): BluetoothAdapter.ACTION_STATE_CHANGED
2 09-21 11:49:09.126: E/123(15118): BluetoothAdapter.STATE_TURNING_OFF
3 09-21 11:49:09.271: E/123(15118): BluetoothAdapter.ACTION_STATE_CHANGED
4 09-21 11:49:09.271: E/123(15118): BluetoothAdapter.STATE_OFF
2.有蓝牙耳机连接的情况
关闭蓝牙耳机(蓝牙保持打开)
1 09-21 22:12:15.439: E/123(17042): BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED
2 09-21 22:12:15.449: E/123(17042): BluetoothProfile.STATE_DISCONNECTED
3 09-21 22:12:16.457: E/123(17042): BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED
连接蓝牙耳机
1 09-21 22:14:22.356: E/123(17042): BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED
2 09-21 22:14:22.356: E/123(17042): BluetoothProfile.STATE_CONNECTED
3 09-21 22:14:22.357: E/123(17042): BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED
关闭蓝牙
1 09-21 22:15:12.558: E/123(17042): BluetoothAdapter.ACTION_STATE_CHANGED
2 09-21 22:15:12.559: E/123(17042): BluetoothAdapter.STATE_TURNING_OFF
3 09-21 22:15:13.557: E/123(17042): BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED
4 09-21 22:15:13.557: E/123(17042): BluetoothProfile.STATE_DISCONNECTED
5 09-21 22:15:13.908: E/123(17042): BluetoothAdapter.ACTION_STATE_CHANGED
6 09-21 22:15:13.908: E/123(17042): BluetoothAdapter.STATE_OFF
打开蓝牙

1 09-21 22:16:06.976: E/123(17042): BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED
2 09-21 22:16:06.976: E/123(17042): BluetoothProfile.STATE_CONNECTING
3 09-21 22:16:06.978: E/123(17042): BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED
4 09-21 22:16:07.036: E/123(17042): BluetoothAdapter.ACTION_STATE_CHANGED
5 09-21 22:16:07.036: E/123(17042): BluetoothAdapter.STATE_ON
6 09-21 22:16:10.616: E/123(17042): BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED
7 09-21 22:16:10.616: E/123(17042): BluetoothProfile.STATE_CONNECTED
8 09-21 22:16:10.619: E/123(17042): BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED

从上面的结果我们能够明白蓝牙监听相关事件
的职责
1.BluetoothAdapter.ACTION_STATE_CHANGED:这个主要是用来监听蓝牙打开与否的状态,它穿过来的参数包含蓝牙正在断开、断开、正在连接、连接的状态,每次状态更改,都会触发这个广播
2.BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED:这个主要是监听蓝牙设备连接状态。它同样包含四种状态
3.BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED:这个就是监听蓝牙耳机的连接状态了。
至于他们监听的顺序,目前还不大清楚,似乎没有一个严格的先后顺序。就是感觉是
如果设备处于连接状态,优先级比较高
如果设备处于断开状态,它的存在条件优先级比较高
bluetooth-蓝牙事件监听的更多相关文章
- WebView使用详解(二)——WebViewClient与常用事件监听
登录|注册 关闭 启舰 当乌龟有了梦想…… 目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书 免费直播:AI时代,机器学习如何入门? 程序员8 ...
- SpringBoot Application事件监听
SpringBoot Application共支持6种事件监听,按顺序分别是: ApplicationStartingEvent:在Spring最开始启动的时候触发 ApplicationEnviro ...
- Java中用得比较顺手的事件监听
第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...
- 4.JAVA之GUI编程事件监听机制
事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件. ...
- Node.js 教程 05 - EventEmitter(事件监听/发射器 )
目录: 前言 Node.js事件驱动介绍 Node.js事件 注册并发射自定义Node.js事件 EventEmitter介绍 EventEmitter常用的API error事件 继承EventEm ...
- .NET事件监听机制的局限与扩展
.NET中把“事件”看作一个基本的编程概念,并提供了非常优美的语法支持,对比如下C#和Java代码可以看出两种语言设计思想之间的差异. // C#someButton.Click += OnSomeB ...
- 让 select 的 option 标签支持事件监听(如复制操作)
这标题,让option支持事件监听,应该不难的呀,有什么好讲的? 其实还是有的,默认在浏览器代码是无法直接对option标签进行操作的,不仅包括JS事件监听,还是CSS样式设置 查了一些资料,姑且认为 ...
- [JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播
-->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的oncl ...
- [No00006A]Js的addEventListener()及attachEvent()区别分析【js中的事件监听】
1.添加时间监听: Chrom中: addEventListener的使用方式: target.addEventListener(type, listener, useCapture); target ...
随机推荐
- Nginx配置免费SSL证书StartSSL,解决Firefox不信任问题
先在StartSSL上申请免费一年的SSL证书,具体过程网上很多教程.然后把申请到的key和crt文件上传到服务器,比如/usr/local/nginx/certs/. Nginx配置SSL证书 直接 ...
- C#错误与异常处理
C# 提供了几个关键字(try.catch 和 finally),程序可以用这些关键字检测异常.处理异常并继续运行.这些关键字是让应用程序更可靠的非常有用的工具. class tryAndCatch ...
- 40个Android问题
1. Android的四大组件是哪些,它们的作用? 答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持 ...
- jx3dps开发日记
2014.11.13 子级过滤 关于optgroup这个东西,一开始以为是个包裹元素,但是一般来说,包裹元素给一个class,那么让这个class show()应该它包裹的元素也跟随show,可结果是 ...
- Contest 20141027 总结
这次考试主要问题出在第一题,由于考试期间没有看清题意,少看了一句 “a=A/1e9" 导致在考试结束最后5分钟发现时修改过于匆忙,改出问题了.另外,这道题同时告诉我long double 在 ...
- bzoj3261
xor有一个很重要的性质就是A xor B xor B=A所以这道题求[l,r]中p,使a[p] xor a[p+1] xor ... xor a[N] xor x 最大就是=最大化a[1] xor ...
- maven配置默认jdk版本
在maven的默认配置中,对于jdk的配置是1.4版本,那么创建/导入maven工程过程中,工程中未指定jdk版本. 对工程进行maven的update,就会出现工程依赖的JRE System Lib ...
- iOS中懒加载
1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化 ...
- ubuntu制作usb启动盘
准备: u盘 iso镜像文件--ubuntu-12.04.2-desktop-amd64.iso 烧盘软件--unetbootin-linux-583 步骤: 格式化u盘 查看u盘信息 #mount/ ...
- [cocos2dx 3.0 + xcode]疑难点记录
1: 新项目创建 1.下载最新Python,安装 2.解压引擎包 3.运行终端,切换到引擎目录(直接cd拖动文件夹到光标即可得到路径) 4.按照文档例子: $ cd cocos2d-x $ ./set ...