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

看代码

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

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. Spire.XLS

    又一款Excel处理神器Spire.XLS,你值得拥有(二)   前言:上篇 C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有 介绍了下组件的两个功能,说不上特色,但确实能解决我 ...

  2. wcf安全

    http://www.cnblogs.com/artech/archive/2011/07/07/customauthorization01.html 安全 http://www.cnblogs.co ...

  3. NOR FLASH与NAND FLASH

    整理自NOR FLASH 与NAND FLASH 1:NandFlash与NorFlash典型电路图 Nor Flash接原理图 从上图可以看出,该NorFlash采用并行地址和数据总线, 其中,21 ...

  4. 【poj1087/uva753】A Plug for UNIX(最大流)

    A Plug for UNIX   Description You are in charge of setting up the press room for the inaugural meeti ...

  5. 测试一下MarkDown

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接 ...

  6. Android List<Map<String,String>转json(例子)

    package com.armslee.json.test.cases; import java.util.ArrayList; import java.util.HashMap; import ja ...

  7. mysql优化21条经验(转)

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序 员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...

  8. Error: opening registry key 'Software\JavaSoft\Java Runtime Environment' Error: could not find java.dll

    java -jar yxCollector-1.1.0.jarError: opening registry key 'Software\JavaSoft\Java Runtime Environme ...

  9. extjs几种常用方法

    1,提交 这种情况一般用于登录界面,也在表单提交应用比较多,大多是一个Button的提交事件,代码为: var loginForm =........; if (loginForm .form.isV ...

  10. WIA设备批量扫描

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...