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 ...
随机推荐
- 关于CMD命令行两三事
1.返回盘符:
- "Cannot convert value '0000-00-00' from column 2 to TIMESTAMP"mysql时间转换bug
今天在项目中遇到这样的一个bug,Cannot convert value '0000-00-00' from column 2 to TIMESTAMP 仔细一查,经过http://blog.csd ...
- andorid studio
http://www.cnblogs.com/smyhvae/p/4390905.html
- Java位运算总结:位运算用途广泛《转》
前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...
- 【UVA1371】Period (二分+DP)
题意: 给出两个字符串A,B将B分解成若干个子字符串,然后每个子字符串都要经过编辑变成字符串A,所有子串中编辑最多的次数即为当前状态下的最大编辑次数,要求求最小的最大编辑次数. 编辑操作包括修改.删除 ...
- Git入门简介
1. Git 背景 Git 最初由Linus Torvalds编写,用于 Linux 内核开发的版本控制工具. Git 与常用的版本控制工具 CVS.Subversion 等不同,它采用了分布式版本 ...
- 【HDOJ】1385 Minimum Transport Cost
Floyd.注意字典序!!! #include <stdio.h> #include <string.h> #define MAXNUM 55 #define INF 0x1f ...
- WebClient的超时问题及解决
WebClient的超时问题及解决 转自:http://blog.163.com/xiaozhi797@126/blog/static/62440288201112245345838/ Webcl ...
- Linux学习笔记22——线程属性(转)
本文来自博客园:http://www.cnblogs.com/yc_sunniwell/archive/2010/06/24/1764204.html 一.线程属性线程具有属性,用pthread_at ...
- 使用doxygen生成注释文档
1. doxygen下载地址:http://www.stack.nl/~dimitri/doxygen/ 2. 参考http://wenku.baidu.com/link?url=ETvBUyaR9f ...