下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

关于在Android中蓝牙的基本使用之BluetoothAdapter类的简介

作者:课课家教育     来源: http://www.kokojia.com点击数:3478发布时间: 2016-04-21 16:02:46

标签: AndroidBluetooth安卓蓝牙

     BluetoothAdapter代表了移动设备的本地的蓝牙适配器, 通过该蓝牙适配器可以对蓝牙进行基本操作,例如: 启动设备发现(startDiscovery), 获取已配对设备(getBoundedDevices), 通过mac蓝牙地址获取蓝牙设备(getRemoteDevice), 从其它设备创建一个监听连接(listenUsingRfcommWithServiceRecord)。

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

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

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

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

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

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

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

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

  API的使用。

  一、 BluetoothAdapter类介绍

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

  开发了,主要有如下功能:

  1、开关蓝牙设备

  2、扫描蓝牙设备

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

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

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

  int STATE_OFF 蓝牙已经关闭

  int STATE_ON 蓝牙已经打开

  int STATE_TURNING_OFF 蓝牙处于关闭过程中 ,关闭ing

  int STATE_TURNING_ON 蓝牙处于打开过程中 ,打开ing

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

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

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

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

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

  int SCAN_MODE_CONNECTABLE_DISCOVERABLE

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

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

  3、获得蓝牙适配器实例

  public static synchronized BluetoothAdapter getDefaultAdapter ()

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

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

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

  4.1、打开蓝牙:

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

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

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

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

  的状态而发生改变。

  代码示例分别如下:

  4.2、关闭蓝牙

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

  public boolean disable ()

  功能:关闭蓝牙设备。

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

  true 表示关闭操作成功

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

  5、扫描蓝牙设备

  public boolean startDiscovery ()

  功能: 扫描蓝牙设备

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

  public boolean cancelDiscovery ()

  功能: 取消扫描过程。

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

  public boolean isDiscovering ()

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

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

  6、 获取蓝牙相关信息

  public String getName ()

  功能:获取蓝牙设备Name

  public String getAddress ()

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

  public boolean setName (String name)

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

  public Set getBondedDevices ()

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

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

  public static boolean checkBluetoothAddress (String address)

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

  返回值: true 设备地址有效

  false 设备地址无效

  public BluetoothDevice getRemoteDevice (String address)

  功能:以给定的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类中,稍后讲到)

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

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

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

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

  BLUETOOTH 值为 "android.permission.BLUETOOTH"

  BLUETOOTH_ADMIN 值为 "android.permission.BLUETOOTH_ADMIN"

  二、 BluetoothDevice类介绍

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

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

  int BOND_BONDED 表明蓝牙已经绑定

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

  int BOND_NONE 表明没有绑定

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

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

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

  示例代码下载地址为:

  

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

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

  上文主要是介绍了BluetoothAdapter类介绍和BluetoothDevice类介绍,BluetoothAdapter类主要是介绍功能和常用的api函数,而BluetoothDevice类主要是其可以和本地蓝牙设备连接通信。

赞(16)
踩(1)
分享到:
华为认证网络工程师 HCIE直播课视频教程