今天在做项目的时候,需要监听一个蓝牙耳机的连接状态。就写了一个小的测试方法。记录如下

看代码

这要处理的是蓝牙监听事件

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-蓝牙事件监听的更多相关文章

  1. WebView使用详解(二)——WebViewClient与常用事件监听

      登录|注册     关闭 启舰 当乌龟有了梦想……       目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书      免费直播:AI时代,机器学习如何入门?      程序员8 ...

  2. SpringBoot Application事件监听

    SpringBoot Application共支持6种事件监听,按顺序分别是: ApplicationStartingEvent:在Spring最开始启动的时候触发 ApplicationEnviro ...

  3. Java中用得比较顺手的事件监听

    第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...

  4. 4.JAVA之GUI编程事件监听机制

    事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件. ...

  5. Node.js 教程 05 - EventEmitter(事件监听/发射器 )

    目录: 前言 Node.js事件驱动介绍 Node.js事件 注册并发射自定义Node.js事件 EventEmitter介绍 EventEmitter常用的API error事件 继承EventEm ...

  6. .NET事件监听机制的局限与扩展

    .NET中把“事件”看作一个基本的编程概念,并提供了非常优美的语法支持,对比如下C#和Java代码可以看出两种语言设计思想之间的差异. // C#someButton.Click += OnSomeB ...

  7. 让 select 的 option 标签支持事件监听(如复制操作)

    这标题,让option支持事件监听,应该不难的呀,有什么好讲的? 其实还是有的,默认在浏览器代码是无法直接对option标签进行操作的,不仅包括JS事件监听,还是CSS样式设置 查了一些资料,姑且认为 ...

  8. [JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播

    -->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的oncl ...

  9. [No00006A]Js的addEventListener()及attachEvent()区别分析【js中的事件监听】

    1.添加时间监听: Chrom中: addEventListener的使用方式: target.addEventListener(type, listener, useCapture); target ...

随机推荐

  1. 【C语言】重定向和文件

    重定向和文件 一.相关基础知识 重定向:在计算机领域,重定向是大多数命令行解释器所具有的功能,包括各种可以将标准流重定向用户规定地点的Unix shells. 输入重定向:可以使程序能够使用文件代替键 ...

  2. UVA 10763 Foreign Exchange

      Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu   Description Your non- ...

  3. Uva_11722 Joining with Friend

    题目链接 题意: 两个人坐火车, 在某个城市到站的时间段分别为[t1, t2] , [s1, s2],停在站台的时间均为w. 问, 若两人能见面的概率. 思路: 一道基础的几何概型, p = s(m) ...

  4. 关于setCharacterEncoding报错

    有时候,代码已搬家,就会报这个错,导致这个错误的原因是: HttpServletResponse存在于servlet-api.jar中, 2.3版本的servlet-api.jar中HttpServl ...

  5. cloudera安装hadoop集群和相关服务

    一.软件准备: 1.下载cloudera-manager-installer.bin(安装...-server),cdh4.cm(这是...-agent),另外还有些需要的关联软件下步添加. 2.先建 ...

  6. Candies(差分约束)

    http://poj.org/problem?id=3159 题意: flymouse是幼稚园班上的班长,一天老师给小朋友们买了一堆的糖果,由flymouse来分发,在班上,flymouse和snoo ...

  7. bootstrap真是个好东西

    之前就知道有bootstrap这么个东东,但是因为本身不做web,也就没有仔细了解.这次一个项目合作方使用django和bootstrap做的,有机会接触了一些,感觉确实非常好! 今天下午利用一个下午 ...

  8. Visual Studio 2013新功能

    微软打破了Visual Studio两年升级一次的传统,Visual Studio 2012发布还不足一年,微软就计划发布了Visual Studio 2013了.在今天的TechEd大会上,微软宣布 ...

  9. 一个简单的GI--Reflective Shadow Maps

    Reflective Shadow Maps是一种简单的GI,虽然名字带有Shadow Maps,但是和Shadow Maps没有什么关系,是在screen space的一种方法,不像光线追踪和辐射度方 ...

  10. 【索引】Objective-C基础教程-读书笔记

    第1章 启程 http://www.cnblogs.com/duxiuxing/p/5492219.html 第2章 对C的扩展 第3章  面向对象编程的基础知识 第4章 继承 第5章 复合 第6章 ...