`
tansitongba
  • 浏览: 503396 次
文章分类
社区版块
存档分类
最新评论

Android中蓝牙的基本使用----BluetoothAdapter类简介

 
阅读更多

本文原创, 转载请注明出处http://blog.csdn.net/qinjuning



天气逐渐热了,自己也越来越懒了,虽然看着了很多东西,解决了很多问题,有些收获却不想写着。主要有一下两方面原因:

第一、以前写的一些关于Android知识的Blog,都是在学习过程中发现网络上没有相关知识,因此下了很大决心,才一步

一步码字儿给贴出来。承蒙各位网友的厚爱,本博客还是有些底子的。

第二、最近的工作态度发生了改变,不在像那么以前充满热情,充满力量,就着问题解决问题,自己都有点耐烦了。心里

寻思着,也许是该改变些什么了吧。

新的手机项目,又开始从事之前的Settings模块了,现在看看Settings模块,没有了最开始的那种心虚,还是觉得挺熟悉的。

就是代码量太多了,看着有点头大。

好吧。我们废话就介绍到此了,下面开始正文。本节主要介绍蓝牙—BluetoothAdapter的一些基本应用,一些简单的Android

API的使用。

一、 BluetoothAdapter类介绍

BluetoothAdapter类简单点来说就是代表了本设备(手机、电脑等)的蓝牙适配器对象,通过它我们可以蓝牙设备进行基本

发了,主要有如下功能:

1、开关蓝牙设备

2、扫描蓝牙设备

3、设置/获取蓝牙状态信息,例如:蓝牙状态值、蓝牙Name、蓝牙Mac地址等;

由于网络上关于BluetoothAdapter的一些常用API函数都有了介绍,因此,我着重介绍一些BluetoothAdapter类疏忽的地方。

1、BluetoothAdapter STATE 状态值 , 即开关状态


intSTATE_OFF 蓝牙已经关闭

intSTATE_ON 蓝牙已经打开

intSTATE_TURNING_OFF 蓝牙处于关闭过程中 ,关闭ing

intSTATE_TURNING_ON 蓝牙处于打开过程中 ,打开ing


上图中 ,红色线路图表示蓝牙由关闭状态 转向为打开状态的过程 ;

蓝色线路表示蓝牙由打开状态 转向为关闭状态的过程 ;


2、BluetoothAdapter SCAN_MOD状态值 ,即扫描状态

首先说明,可以扫描其他设备的,当然它同时能被其他蓝牙设备扫码。

int SCAN_MODE_CONNECTABLE 表明该蓝牙可以扫描其他蓝牙设备

int SCAN_MODE_CONNECTABLE_DISCOVERABLE

表 明该蓝牙设备同时可以扫码其他蓝牙设备,并且可以被其他蓝牙设备扫描到。

int SCAN_MODE_NONE : 该蓝牙不能扫描以及被扫描。

3、获得蓝牙适配器实例

public static synchronizedBluetoothAdaptergetDefaultAdapter()

功能:获得本设备的蓝牙适配器实例。

返回值:如果设备具备蓝牙功能,返回BluetoothAdapter实例;否则,返回null对象。

4、打开/关闭蓝牙的两种方法:

4.1、打开蓝牙:

①、直接调用函数enable()去打开蓝牙设备 ;

②、系统API去打开蓝牙设备,该方式会弹出一个对话框样式的Activity供用户选择是否打开蓝牙设备。

注意:如果蓝牙已经开启,不会弹出该Activity界面。

PS:在目前Android手机中,是不支持在飞行模式下开启蓝牙的。如果蓝牙已经开启,那么蓝牙的开关状态会随着飞行模式

的状态而发生改变。

代码示例分别如下:

//第一种打开方法: 调用enable 即可
boolean result = mBluetoothAdapter.enable();

//
/第二种打开方法 ,调用系统API去打开蓝牙
if (!mBluetoothAdapter.isEnabled()) //未打开蓝牙,才需要打开蓝牙
{
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, REQUEST_OPEN_BT_CODE);
//会以Dialog样式显示一个Activity , 我们可以在onActivityResult()方法去处理返回值
}

4.2、关闭蓝牙

直接调用API 函数即disable()即可。

public booleandisable()

功能:关闭蓝牙设备。

返回值:该函数会立即返回。

true 表示关闭操作成功

false 表示蓝牙操作失败 , ①、当前蓝牙已经关闭 ;②、其他一些异常情况

5、扫描蓝牙设备


public booleanstartDiscovery()

功能:扫描蓝牙设备

注意: 如果蓝牙没有开启,该方法会返回false ,即不会开始扫描过程。


public booleancancelDiscovery()

功能: 取消扫描过程。

注意: 如果蓝牙没有开启,该方法会返回false。


public booleanisDiscovering()

功能: 是否正在处于扫描过程中。

注意: 如果蓝牙没有开启,该方法会返回false。

6、 获取蓝牙相关信息

publicStringgetName()

功能:获取蓝牙设备Name

publicStringgetAddress()

功能:获取蓝牙设备的硬件地址(MAC地址),例如:00:11:22:AA:BB:CC

public booleansetName(Stringname)

功能:设置蓝牙设备的Name,


publicSet<BluetoothDevice>getBondedDevices()

功能:获取与本机蓝牙所有绑定的远程蓝牙信息,以BluetoothDevice类实例(稍后讲到)返回。

注意:如果蓝牙为开启,该函数会返回一个空集合 。


public static booleancheckBluetoothAddress(Stringaddress)

功能: 验证蓝牙设备MAC地址是否有效。所有设备地址的英文字母必须大写,48位,形如:00:43:A8:23:10:F1 。

返回值: true 设备地址有效

false 设备地址无效


publicBluetoothDevicegetRemoteDevice(Stringaddress)

功能:以给定的MAC地址去创建一个BluetoothDevice类实例(代表远程蓝牙实例)。即使该蓝牙地址不可见,也会产生

BluetoothDevice类实例。

返回:BluetoothDevice类实例 。注意,如果该蓝牙设备MAC地址不能被识别,其蓝牙Name为null。

异常:如果MAC address无效,抛出IllegalArgumentException

7、蓝牙相关广播


Action值 说明


ACTION_STATE_CHANGED 蓝牙状态值发生改变

ACTION_SCAN_MODE_CHANGED 蓝牙扫描状态(SCAN_MODE)发生改变

ACTION_DISCOVERY_STARTED 蓝牙扫描过程开始

ACTION_DISCOVERY_FINISHED 蓝牙扫描过程结束

ACTION_LOCAL_NAME_CHANGED 蓝牙设备Name发生改变

ACTION_REQUEST_DISCOVERABLE 请求用户选择是否使该蓝牙能被扫描

PS:如果蓝牙没有开启,用户点击确定后,会首先开启蓝牙,继而设置蓝牙能被扫描。

ACTION_REQUEST_ENABLE 请求用户选择是否打开蓝牙

ACTION_FOUND(该常量字段位于BluetoothDevice类中,稍后讲到)

说明:蓝牙扫描时,扫描到任一远程蓝牙设备时,会发送此广播。

通过注册这个广播,我们可以获取扫描到的蓝牙信息。方法如下:

//扫描到了任一蓝牙设备
if(BluetoothDevice.ACTION_FOUND.equals(intent.getAction()))
{
   Log.v(TAG, "### BT BluetoothDevice.ACTION_FOUND ##");
                
   BluetoothDevice btDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                
   if(btDevice != null){
        Log.v(TAG , "Name : " + btDevice.getName() + " Address: " + btDevice.getAddress());
                    
   }
   else if(BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(intent.getAction()))
   {
        Log.v(TAG, "### BT ACTION_BOND_STATE_CHANGED ##");
                
        int cur_bond_state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_NONE);
        int previous_bond_state = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.BOND_NONE);
                
                
        Log.v(TAG, "### cur_bond_state ##" + cur_bond_state + " ~~ previous_bond_state" + previous_bond_state);
    }
}

最后,关于这些广播的Intent信息,还有很多附加值,大家可以去看看Android SDK。

更多关于BluetoothAdapter类的API介绍,请参考农民伯伯的博客:

Android 中文API (69) —— BluetoothAdapter[蓝牙]



最后,在使用这两个类时,需要以下两个权限:

BLUETOOTH 值为 "android.permission.BLUETOOTH"

BLUETOOTH_ADMIN 值为 "android.permission.BLUETOOTH_ADMIN"



二、 BluetoothDevice类介绍

该类就是关于远程蓝牙设备的一个描述。通过它可以和本地蓝牙设备---BluetoothAdapter连接通信。

1、 蓝牙绑定(Bound)状态 , 即蓝牙设备是否与其他蓝牙绑定

int BOND_BONDED 表明蓝牙已经绑定

int BOND_BONDING 表明蓝牙正在绑定过程中 , bounding

int BOND_NONE 表明没有绑定

更多关于BluetoothDevice类的更多介绍,请参考该农民伯伯的该篇博客:

Android 中文API (70) —— BluetoothDevice[蓝牙]

我也不再啰嗦了。


下面贴出一个小Demo吧,挺简单的,也就是关蓝牙API的基本操作和蓝牙相关广播的监听,处于显示目的方便性,本文对

蓝牙相关信息的获取,都通过Log输出。请大家注意。 截图如下:



代码什么的就不在张贴了,只是帮助大家学习过程中减少工作量而已,别无其他。


示例代码下载地址为:


http://download.csdn.net/detail/qinjuning/4417003

最后关于如果连接某个蓝牙设备,就需要利用蓝牙部分的隐藏API了,关于这方面,大家可以看看hellogv的博客:

Android提高第十三篇之探秘蓝牙隐藏API

目前还没有机会研究这方面知识,以后会尝试的。 Good luck for U !





分享到:
评论

相关推荐

    Android蓝牙UUID通信-客服端服务端代码.zip

    这个压缩包文件“Android蓝牙UUID通信-客服端服务端代码.zip”提供了两个关键部分:BluetoothClient(客户端)和BluetoothServer(服务器端),它们展示了如何通过UUID来建立蓝牙连接并传输数据。下面我们将详细探讨...

    android-蓝牙-单片机-显示波形.docx

    在本文档中,我们将使用Android蓝牙API实现单片机与Android设备之间的蓝牙通信。 蓝牙操作主要包括以下几个步骤: 1. 蓝牙权限申请:在AndroidManifest.xml文件中添加蓝牙权限申请,允许应用程序访问蓝牙设备。 ``...

    Android蓝牙开发工具 Bluetooth-LE-Library---Android-master

    1. 设备扫描:库封装了Android的`BluetoothAdapter`类,用于扫描周围的BLE设备。开发者可以通过设置扫描参数(如扫描间隔、持续时间等)来优化搜索性能。 2. 连接管理:库提供了一个简单易用的接口,用于连接到指定...

    androidstudio app连接蓝牙模块进行通信

    在Android Studio中开发一款应用程序,实现与蓝牙2.0模块的通信,是移动应用开发中的一个常见需求。本文将深入探讨这一主题,介绍如何通过Android Studio构建一个简单的APP,实现蓝牙设备的配对和连接,进而进行数据...

    基于Android Studio经典蓝牙APP---继上一次的完善版之APP工程文件

    在蓝牙部分,Android提供了BluetoothAdapter类来处理设备的蓝牙功能,例如检查设备是否支持蓝牙,获取当前蓝牙状态,以及开启或关闭蓝牙。此外,BluetoothDevice类用于表示远程蓝牙设备,可以用来搜索附近设备并建立...

    android蓝牙通讯连接Hc-05模块.zip

    首先,为了在Android应用中使用蓝牙功能,你需要在Manifest.xml文件中添加必要的权限。`&lt;uses-permission&gt;`标签是必须的,包括`BLUETOOTH`、`BLUETOOTH_ADMIN`,这允许应用发现和连接蓝牙设备: ```xml &lt;uses-...

    android蓝牙连接打印机-IT计算机-毕业设计.zip

    在Android系统中,`BluetoothAdapter`类是核心,用于管理设备的蓝牙功能,包括开启、关闭蓝牙,以及搜索周围的蓝牙设备。通过调用`BluetoothAdapter.getDefaultAdapter()`可以获取到设备的默认蓝牙适配器。 其次,...

    android蓝牙开发---与蓝牙模块进行通信.pdf

    总之,Android蓝牙开发涉及蓝牙适配器的管理、设备的搜索、连接的建立以及数据交换。虽然过程中可能会遇到各种挑战,如设备兼容性、网络稳定性等问题,但遵循标准流程并做好异常处理,可以有效地完成蓝牙模块的通信...

    android蓝牙开发---与蓝牙模块进行通信.docx

    总结来说,Android蓝牙开发涉及的主要知识点包括:蓝牙适配器的获取和管理,设备搜索与连接,以及数据的读写操作。通过理解这些核心概念,开发者能够构建出基本的蓝牙通信功能。在实际项目中,还需要考虑用户体验、...

    Android蓝牙,配对,搜索,连接,通信,断开的Demo

    本项目"Android蓝牙,配对,搜索,连接,通信,断开的Demo"是一个使用Kotlin编写的Android应用示例,它涵盖了蓝牙功能的基本操作,包括设备的搜索、配对、取消配对、连接、数据传输以及断开连接等核心环节。...

    基于Android的手机蓝牙通讯--毕业论文.doc

    这篇毕业论文探讨的是基于Android系统的手机蓝牙通讯技术。在当今移动通信领域,Android作为主流操作系统,其集成的蓝牙功能为设备...它不仅对于理解Android蓝牙编程有指导意义,也为开发类似应用的工程师提供了参考。

    蓝牙-android-blutetootkit

    1. **BluetoothAdapter**: 这是Android蓝牙系统的核心组件,提供了开启、关闭蓝牙,扫描设备,以及建立连接等功能。开发者可以调用`getBluetoothAdapter()`获取系统的BluetoothAdapter实例。 2. **查找和连接设备**...

    android studio 蓝牙开发demo

    总的来说,"android studio 蓝牙开发demo"涵盖了Android Bluetooth LE开发的基本流程,从设备搜索、连接、服务发现到数据交换,是学习和实践Android蓝牙编程的好素材。通过学习这个示例,开发者可以构建自己的蓝牙...

    Android蓝牙语音数据传输

    以上是Android蓝牙语音数据传输的基本流程。实际开发中,还需要根据具体需求进行调整和优化,例如处理不同设备之间的兼容性问题、增加音质控制、实现多设备连接等。由于示例代码是在eclipse环境下编写的,可能需要...

    android设备连接蓝牙打印机,并实现打印功能

    总的来说,Android设备连接蓝牙打印机并实现打印功能涉及了Android蓝牙API的使用、打印机协议的理解以及数据处理和错误处理等技术。开发者需要具备一定的蓝牙通信和硬件交互知识,才能有效地完成这项工作。

    android 蓝牙4.0 dfu 空中升级

    在Android中,开发BLE应用主要涉及`BluetoothGatt`类和`BluetoothAdapter`类,它们提供了与BLE设备交互的API。 **OTA空中升级** 是指通过网络进行设备固件的远程升级。在Android中,实现BLE设备的OTA升级通常分为...

    Android与PC使用蓝牙通信

    在Android端,我们通常会使用BluetoothAdapter类来管理和操作蓝牙功能。首先,我们需要检查设备是否支持蓝牙并打开蓝牙。然后,使用BluetoothDevice类寻找周围的蓝牙设备,一旦找到目标PC,就使用BluetoothSocket类...

    安卓wifi蓝牙相关-Android通过蓝牙使用Pbap协议读取通讯录.rar

    本资料主要探讨了如何在Android系统中利用蓝牙协议栈中的Pbap(Phone Book Access Profile)协议来读取设备的通讯录。Pbap是蓝牙设备之间交换联系人信息的标准协议,适用于汽车蓝牙系统、智能手表等设备与手机同步...

    Node.js-AndroidBLE蓝牙开发框架

    **Node.js-AndroidBLE蓝牙开发框架详解** 在移动设备开发中,蓝牙技术是实现设备间无线通信的关键技术之一。特别是低功耗蓝牙(Bluetooth Low Energy, BLE),在物联网(IoT)领域应用广泛,用于传感器数据传输、...

Global site tag (gtag.js) - Google Analytics