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-蓝牙事件监听》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CMD下查询Mysql中文乱码的解决方法VUE Flask登录的初探-JWT的探索下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

将你的苹果变成“猫”:电脑上网巧用iPhone

导语:如果以为你的iPhone只能用来在手机上简单地浏览网页,那可就太浪费它了。其实它无处不在的接入能力,也可以帮你的电脑随时上网。快将这个大苹果变成你的小“猫”吧! 假如你有一部能上网的iPhone,除了能用iPhone上网冲浪之外,还能将iPhone变成一只猫、让电脑分享iphone的网络上网,方法是电脑选择USB、蓝牙或者Wi-Fi方式连接iPhon...

Ubuntu蓝牙识别及PyBluez实现蓝牙串口测试

系统:Ubuntu 14.04 蓝牙:绿联USB2.0蓝牙适配器(型号:CM109;芯片:CSR8510) 一、蓝牙识别:   1、插入硬件,打开终端,查看是否检测到设备: $ lsusb Bus 001 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI...

WinCE串口蓝牙的实现 .

此篇文章用于说明如何在WinCE系统上实现串口蓝牙,希望给想在CE上实现这个功能的“新手”朋友一个帮助。    先说一下我的硬件环境:CSR BC4 ROM蓝牙芯片,S3C6410,WinCE6.0系统。     硬件连接:把蓝牙的RX,TX,CTS,RTS和板子上的相应口连接,注意是交叉连接,我这里连接的是UART1。还有就是给蓝牙供电,地,天线等。  ...

蓝牙的OBEX协议

1.概述     OBEX为Object Exchange,用于在蓝牙设备间传数据对象,来源于红外定义的协议,后被蓝牙采用。OBEX在蓝牙协议层中的位置如下图(在之前的OBEX版本中,OBEX是通过RFCOMM挂在L2CAP上的): 2.Object Model     OBEX定义了Object model来进行数据的交换,形式为Request-Re...

蓝牙协议分析(4)_IPv6 Over BLE介绍

1. 前言 蓝牙是个奇葩的家伙:它总是以后来者的身份出现,很喜欢打仗,而且还不落下风(有点像某讯的风格)。90年代末期和Wi-Fi的无线标准之争如此,当前和802.15.4系(ZigBee、RF4CE、Thread等)的IoT之争,也如此。 90年代末期,蓝牙刚出道的时候,就曾叫嚣着把Wi-Fi(802.11)从地球上抹去。反过来,1999年Wi-Fi...

iOS开发~蓝牙开发

IOS蓝牙开发   http://blog.csdn.net/xufeidll/article/details/24022261 http://blog.csdn.net/swibyn/article/details/20531593   由于接到iphone需要和第三方蓝牙设备交互的任务,便开始了蓝牙开发这件事。 在探索了一段时间后,iOS的蓝牙开发相关...