Bluetooth---BluetoothAdapter

转载于:Android Club SYSU:http://www.android-wik

API

一、结构

public final classBluetoothAdapter extendsObject

        

java.lang.Object

android.bluetooth.BluetoothAdapter

 

  二、概述

  代表本地的蓝牙适配器设备。BluetoothAdapter类让用户能执行基本的蓝牙任务。例如:初始化设备的搜索,查询可匹配的设备集,使用一个已知的MAC地址来初始化一个BluetoothDevice类,创建一个 BluetoothServerSocket类以监听其它设备对本机的连接请求等。

  为了得到这个代表本地蓝牙适配器的 BluetoothAdapter类,调用getDefaultAdapter()这一静态方法。这是所有蓝牙动作使用的第一步。当拥有本地适配器以后,用户可以获得一系列的BluetoothDevice对象,这些对象代表所有拥有getBondedDevice()方法的已经匹配的设备;用 startDiscovery()方法来开始设备的搜寻;或者创建一个BluetoothServerSocket类,通过 listenUsingRfcommWithServiceRecord(String, UUID)方法来监听新来的连接请求。

  Note:大部分方法需要BLUETOOTH权限,一些方法同时需要BLUETOOTH_ADMIN权限。

  参见

           BluetoothDevice

      BluetoothServerSocket

 

  三、常量

    String      ACTION_DISCOVERY_FINISHED   

  广播事件:本地蓝牙适配器已经完成设备的搜寻过程。

    需要BLUETOOTH权限接收。

  常量值:"android.bluetooth.adapter.action.DISCOVERY_FINISHED"

 

  String      ACTION_DISCOVERY_STARTED    

  广播事件:本地蓝牙适配器已经开始对远程设备的搜寻过程。

  它通常牵涉到一个大概需时12秒的查询扫描过程,紧跟着是一个对每个获取到自身蓝牙名称的新设备的页面扫描。

          用户会发现一个把ACTION_FOUND常量通知为远程蓝牙设备的注册。
设备查找是一个重量级过程。当查找正在进行的时候,用户不能尝试对新的远程蓝牙设备进行连接,同时存在的连接将获得有限制的带宽以及高等待时间。用户可用
cancelDiscovery()类来取消正在执行的查找进程。

  需要BLUETOOTH权限接收。

  常量值:"android.bluetooth.adapter.action.DISCOVERY_STARTED"

 

  String      ACTION_LOCAL_NAME_CHANGED     

  广播活动:本地蓝牙适配器已经更改了它的蓝牙名称。

  该名称对远程蓝牙设备是可见的。

  它总是包含了一个带有名称的EXTRA_LOCAL_NAME附加域。

  需要BLUETOOTH权限接收。

  常量值:"android.bluetooth.adapter.action.LOCAL_NAME_CHANGED"

 

  String      ACTION_REQUEST_DISCOVERABLE     

  Activity活动:显示一个请求被搜寻模式的系统活动。如果蓝牙模块当前未打开,该活动也将请求用户打开蓝牙模块。

  被搜寻模式和SCAN_MODE_CONNECTABLE_DISCOVERABLE等价。当远程设备执行查找进程的时候,它允许其发现该蓝牙适配器。

  从隐私安全考虑,Android不会将被搜寻模式设置为默认状态。

  该意图的发送者可以选择性地运用EXTRA_DISCOVERABLE_DURATION这个附加域去请求发现设备的持续时间。普遍来说,对于每一请求,默认的持续时间为120秒,最大值则可达到300秒。

  Android运用onActivityResult(int, int, Intent)回收方法来传递该活动结果的通知。被搜寻的时间(以秒为单位)将通过resultCode值来显示,如果用户拒绝被搜寻,或者设备产生了错 误,则通过RESULT_CANCELED值来显示。

  每当扫描模式变化的时候,应用程序可以为通过ACTION_SCAN_MODE_CHANGED值来监听全局的消息通知。比如,当设备停止被搜寻以后,该消息可以被系统通知給应用程序。

  需要BLUETOOTH权限

  常量值:"android.bluetooth.adapter.action.REQUEST_DISCOVERABLE"

 

  String      ACTION_REQUEST_ENABLE

  Activity活动:显示一个允许用户打开蓝牙模块的系统活动。

  当蓝牙模块完成打开工作,或者当用户决定不打开蓝牙模块时,系统活动将返回该值。

  Android运用onActivityResult(int, int, Intent)回收方法来传递该活动结果的通知。如果蓝牙模块被打开,将通过resultCode值RESULT_OK来显示;如果用户拒绝该请求,或者设备产生了错误,则通过RESULT_CANCELED值来显示。

          每当蓝牙模块被打开或者关闭,应用程序可以为通过ACTION_STATE_CHANGED值来监听全局的消息通知。

  需要BLUETOOTH权限

  常量值:"android.bluetooth.adapter.action.REQUEST_ENABLE"

 

  String      ACTION_SCAN_MODE_CHANGED        

  广播活动:指明蓝牙扫描模块或者本地适配器已经发生变化

  它总是包含EXTRA_SCAN_MODEEXTRA_PREVIOUS_SCAN_MODE。这两个附加域各自包含了新的和旧的扫描模式。

  需要BLUETOOTH权限

  常量值:"android.bluetooth.adapter.action.SCAN_MODE_CHANGED"

 

  String      ACTION_STATE_CHANGED   

  广播活动:本来的蓝牙适配器的状态已经改变。

  例如:蓝牙模块已经被打开或者关闭。

  它总是包含EXTRA_STATEEXTRA_PREVIOUS_STATE。这两个附加域各自包含了新的和旧的状态。

  需要BLUETOOTH权限接收

  常量值:"android.bluetooth.adapter.action.STATE_CHANGED"

 

  int  ERROR   

  标记该类的错误值。确保和该类中的任意其它整数常量不相等。它为需要一个标记错误值的函数提供了便利。例如:

  Intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)

  常量值: -2147483648 (0x80000000)

 

  String      EXTRA_DISCOVERABLE_DURATION     

  试图在ACTION_REQUEST_DISCOVERABLE常量中作为一个可选的整型附加域,来为短时间内的设备发现请求一个特定的持续时间。默认值为120秒,超过300秒的请求将被限制。这些值是可以变化的。

  常量值:"android.bluetooth.adapter.extra.DISCOVERABLE_DURATION"

 

  String      EXTRA_LOCAL_NAME   

  试图在ACTION_LOCAL_NAME_CHANGED常量中作为一个字符串附加域,来请求本地蓝牙的名称。

  常量值:"android.bluetooth.adapter.extra.LOCAL_NAME"

 

  String      EXTRA_PREVIOUS_SCAN_MODE  

  试图在ACTION_SCAN_MODE_CHANGED常量中作为一个整型附加域,来请求以前的扫描模式。可能值有:SCAN_MODE_NONE,SCAN_MODE_CONNECTABLE,SCAN_MODE_CONNECTABLE_DISCOVERABLE

  常量值:"android.bluetooth.adapter.extra.PREVIOUS_SCAN_MODE"

 

  String      EXTRA_PREVIOUS_STATE      

  试图在ACTION_STATE_CHANGED常量中作为一个整型附加域,来请求以前的供电状态。 可能值有: STATE_OFF,STATE_TURNING_ON,STATE_ON,STATE_TURNING_OFF

  常量值:"android.bluetooth.adapter.extra.PREVIOUS_STATE"

 

  String      EXTRA_SCAN_MODE     

  试图在ACTION_SCAN_MODE_CHANGED常量中作为一个整型附加域,来请求当前的扫描模式.可能值有:SCAN_MODE_NONE,SCAN_MODE_CONNECTABLE,SCAN_MODE_CONNECTABLE_DISCOVERABLE

  常量值:"android.bluetooth.adapter.extra.SCAN_MODE"

 

  String      EXTRA_STATE         

  试图在ACTION_STATE_CHANGED常量中作为一个整型附加域,来请求当前的供电状态。 可能值有: STATE_OFF,STATE_TURNING_ON,STATE_ON,STATE_TURNING_OFF

  常量值:"android.bluetooth.adapter.extra.STATE"

 

  int  SCAN_MODE_CONNECTABLE       

  指明在本地蓝牙适配器中,查询扫描功能失效,但页面扫描功能有效。因此该设备不能被远程蓝牙设备发现,但如果以前曾经发现过该设备,则远程设备可以对其进行连接。

  常量值: 21 (0x00000015)

 

  int  SCAN_MODE_CONNECTABLE_DISCOVERABLE    

  指明在本地蓝牙适配器中,查询扫描功能和页面扫描功能都有效。因此该设备既可以被远程蓝牙设备发现,也可以被其连接。

  常量值: 23 (0x00000017)

 

  int  SCAN_MODE_NONE      

  指明在本地蓝牙适配器中,查询扫描功能和页面扫描功能都失效.因此该设备既不可以被远程蓝牙设备发现,也不可以被其连接。

  常量值: 20 (0x00000014)

 

  int  STATE_OFF     

  指明本地蓝牙适配器模块已经关闭

  常量值: 10 (0x0000000a)

 

  int  STATE_ON      

  指明本地蓝牙适配器模块已经打开,并且准备被使用。

  常量值: 12 (0x0000000c)

 

  int  STATE_TURNING_OFF   

  指明本地蓝牙适配器模块正在关闭。本地客户端可以立刻尝试友好地断开任意外部连接。

  常量值: 13 (0x0000000d)

 

  int  STATE_TURNING_ON    

  指明本地蓝牙适配器模块正在打开. 然而本地客户在尝试使用这个适配器之前需要为STATE_ON状态而等待。

  常量值:11 (0x0000000b)

 

 

  四、公共方法

  public booleancancelDiscovery ()

  取消当前的设备发现查找进程

  需要BLUETOOTH_ADMIN权限。

  因为对蓝牙适配器而言,查找是一个重量级的过程,因此这个方法必须在尝试连接到远程设备前使用用connect()方法进行调用。发现的过程不会由活动来进行管理,但是它会作为一个系统服务来运行,因此即使它不能直接请求这样的一个查询动作,也必需取消该搜索进程。

  如果蓝牙状态不是STATE_ON,这个API将返回false。蓝牙打开后,等待ACTION_STATE_CHANGED更新成STATE_ON

  返回值

  成功则返回true,有错误则返回false

 

  public static booleancheckBluetoothAddress (String address)

  验证皆如"00:43:A8:23:10:F0"之类的蓝牙地址。

  字母必须为大写才有效。

  参数

  address字符串形式的蓝牙模块地址

  返回值

  地址正确则返回true,否则返回false

 

  public booleandisable ()

  关闭本地蓝牙适配器不能在没有明确关闭蓝牙的用户动作中使用。

  这个方法友好地停止所有的蓝牙连接,停止蓝牙系统服务,以及对所有基础蓝牙硬件进行断电。

  没有用户的直接同意,蓝牙永远不能被禁止。这个disable()方法只提供了一个应用,该应用包含了一个改变系统设置的用户界面(例如电源控制应用)。

  是一个异步调用方法:该方法将马上获得返回值,用户要通过监听ACTION_STATE_CHANGED值来获取随后的适配器状态改变的通知。如果该调用返回true值,则该适配器状态会立刻从STATE_ON转向STATE_TURNING_OFF,稍后则会转为STATE_OFF或者 STATE_ON。如果该调用返回false,那么系统已经有一个保护蓝牙适配器被关闭的问题比如该适配器已经被关闭了。

  需要BLUETOOTH_ADMIN权限。

                 返回值

  如果蓝牙适配器的停止进程已经开启则返回true,如果产生错误则返回false

 

  public booleanenable ()

           打开本地蓝牙适配器不能在没有明确打开蓝牙的用户动作中使用。

  该方法将为基础的蓝牙硬件供电,并且启动所有的蓝牙系统服务。

  没有用户的直接同意,蓝牙永远不能被禁止。如果用户为了创建无线连接而打开了蓝牙模块,则其需要ACTION_REQUEST_ENABLE值,该值将提出一个请求用户允许以打开蓝牙模块的会话。这个enable()值只提供了一个应用,该应用包含了一个改变系统设置的用户界面(例如电源控制应用)。

  这是一个异步调用方法:该方法将马上获得返回值,用户要通过监听ACTION_STATE_CHANGED值来获取随后的适配器状态改变的通知。如果该调用返回true值,则该适配器状态会立刻从STATE_OFF转向STATE_TURNING_ON,稍后则会转为STATE_OFF或者 STATE_ON。如果该调用返回false,那么说明系统已经有一个保护蓝牙适配器被打开的问题比如飞行模式,或者该适配器已经被打开。

  需要BLUETOOTH_ADMIN权限。

  返回值    

  如果蓝牙适配器的打开进程已经开启则返回true,如果产生错误则返回false

 

  public StringgetAddress ()

  返回本地蓝牙适配器的硬件地址

  例如: "00:11:22:AA:BB:CC"

  需要BLUETOOTH权限。

  返回值    

  字符串形式的蓝牙模块地址

 

  public Set<BluetoothDevice>getBondedDevices ()

  返回已经匹配到本地适配器的BluetoothDevice类的对象集合

  如果蓝牙状态不是STATE_ON,这个API将返回false。蓝牙打开后,等待ACTION_STATE_CHANGED更新成STATE_ON

  需要BLUETOOTH权限。

  返回值

  未被修改的BluetoothDevice类的对象集合,如果有错误则返回null

 

  public static synchronized BluetoothAdaptergetDefaultAdapter ()

  获取对默认本地蓝牙适配器的的操作权限。

  目前Andoird只支持一个蓝牙适配器,但是API可以被扩展为支持多个适配器。该方法总是返回默认的适配器。

  返回值

  返回默认的本地适配器,如果蓝牙适配器在该硬件平台上不能被支持,则返回null

 

  public StringgetName ()

  获取本地蓝牙适配器的蓝牙名称

  这个名称对于外界蓝牙设备而言是可见的。

  需要BLUETOOTH权限。

  返回值

  该蓝牙适配器名称,如果有错误则返回null

 

  public BluetoothDevicegetRemoteDevice (String address)

  为给予的蓝牙硬件地址获取一个BluetoothDevice对象。

           合法的蓝牙硬件地址必须为大写,格式类似于"00:11:22:33:AA:BB"checkBluetoothAddress(String)方法可以用来验证蓝牙地址的正确性。

  BluetoothDevice类对于合法的硬件地址总会产生返回值,即使这个适配器从未见过该设备。

  参数

  address合法的蓝牙MAC地址

  异常

  IllegalArgumentException     如果地址不合法

 

  public intgetScanMode ()

  获取本地蓝牙适配器的当前蓝牙扫描模式

  蓝牙扫描模式决定本地适配器可连接并且/或者可被远程蓝牙设备所连接。

  可能值有: SCAN_MODE_NONE, SCAN_MODE_CONNECTABLE, SCAN_MODE_CONNECTABLE_DISCOVERABLE.

  如果蓝牙状态不是STATE_ON,这个API将返回false。蓝牙打开后,等待ACTION_STATE_CHANGED更新成STATE_ON

  需要BLUETOOTH权限。

        返回值

  扫描模式

 

  public intgetState ()

  获取本地蓝牙适配器的当前状态

  可能值有 STATE_OFF, STATE_TURNING_ON, STATE_ON, STATE_TURNING_OFF.
需要BLUETOOTH

  需要BLUETOOTH权限。

             返回值

   蓝牙适配器的当前状态

 

  public booleanisDiscovering ()

  如果当前蓝牙适配器正处于设备发现查找进程中,则返回真值

  设备查找是一个重量级过程。当查找正在进行的时候,用户不能尝试对新的远程蓝牙设备进行连接,同时存在的连接将获得有限制的带宽以及高等待时间。用户可用cencelDiscovery()类来取消正在执行的查找进程。

  应用程序也可以为ACTION_DISCOVERY_STARTED或者ACTION_DISCOVERY_FINISHED进行注册,从而当查找开始或者完成的时候,可以获得通知。

  如果蓝牙状态不是STATE_ON,这个API将返回false。蓝牙打开后,等待ACTION_STATE_CHANGED更新成STATE_ON

  需要BLUETOOTH权限。

                 返回值

  如果正在查找,则返回true

 

  public booleanisEnabled ()

  如果蓝牙正处于打开状态并可用,则返回真值

  getBluetoothState()==STATE_ON等价

  需要BLUETOOTH权限。

                 返回值

  如果本地适配器已经打开,则返回true

 

  public BluetoothServerSocketlistenUsingRfcommWithServiceRecord (String name, UUID uuid)

  创建一个正在监听的安全的带有服务记录的无线射频通信(RFCOMM)蓝牙端口。

  一个对该端口进行连接的远程设备将被认证,对该端口的通讯将被加密。

  使用accpet()方法可以获取从监听BluetoothServerSocket处新来的连接

  该系统分配一个未被使用的无线射频通信通道来进行监听。

  该系统也将注册一个服务探索协议(SDP)记录,该记录带有一个包含了特定的通用唯一识别码(Universally Unique IdentifierUUID),服务器名称和自动分配通道的本地SDP服务。远程蓝牙设备可以用相同的UUID来查询自己的SDP服务器,并搜寻连接到了哪个通道上。如果该端口已经关闭,或者如果该应用程序异常退出,则这个SDP记录会被移除。

  使用createRfcommSocketToServiceRecord(UUID)从另一使用相同UUID的设备来连接到这个端口

  需要BLUETOOTH权限。

  参数

  name      SDP记录下的服务器名

  uuid        SDP记录下的UUID

                 返回值

  一个正在监听的无线射频通信蓝牙服务端口

  异常

  IOException   产生错误,比如蓝牙设备不可用,或者许可无效,或者通道被占用。

 

  public boolean setName (String name)

  设置蓝牙或者本地蓝牙适配器的昵称.

  这个名字对于外界蓝牙设备而言是可见的。

  合法的蓝牙名称最多拥有248UTF-8字符,但是很多外界设备只能显示前40个字符,有些可能只限制前20个字符。

  如果蓝牙状态不是STATE_ON,这个API将返回false。蓝牙打开后,等待ACTION_STATE_CHANGED更新成STATE_ON

  需要BLUETOOTH_ADMIN权限。

  参数

  name     一个合法的蓝牙名称

  返回值

  如果该名称已被设定,则返回true,否则返回false

 

  public booleanstartDiscovery ()

  开始对远程设备进行查找的进程

  它通常牵涉到一个大概需时12秒的查询扫描过程,紧跟着是一个对每个获取到自身蓝牙名称的新设备的页面扫描。

  这是一个异步调用方法:该方法将马上获得返回值,注册ACTION_DISCOVERY_STARTED and ACTION_DISCOVERY_FINISHED意图准确地确定该探索是处于开始阶段或者完成阶段。注册ACTION_FOUND以活动远程蓝牙设备已找到的通知。

  设备查找是一个重量级过程。当查找正在进行的时候,用户不能尝试对新的远程蓝牙设备进行连接,同时存在的连接将获得有限制的带宽以及高等待时间。用户可用cencelDiscovery()类来取消正在执行的查找进程。发现的过程不会由活动来进行管理,但是它会作为一个系统服务来运行,因此即使它不能直接请求这样的一个查询动作,也必需取消该搜索进程。

  设备搜寻只寻找已经被连接的远程设备。许多蓝牙设备默认不会被搜寻到,并且需要进入到一个特殊的模式当中。

  如果蓝牙状态不是STATE_ON,这个API将返回false。蓝牙打开后,等待ACTION_STATE_CHANGED更新成STATE_ON

  需要BLUETOOTH_ADMIN权限。

  返回值

  成功返回true,错误返回false

 

  五、补充

          文章精选

                   Android蓝牙开发浅谈

                   Android蓝牙APIBluetoothAdapter(1)

                   Android蓝牙APIBluetoothAdapter(2)

                   Ophone平台蓝牙编程基础

 

          关于蓝牙的文章,大家还可以搜一下EOE期刊第六期:数据通信,里面能获取更多资料。( 2011-3-23补充

转载出处http://blog.csdn.net/qinjuning

 一、 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手机中,是不支持在飞行模式下开启蓝牙的。如果蓝牙已经开启,那么蓝牙的开关状态会随着飞行模式

 的状态而发生改变。

 

       代码示例分别如下:

 

  1. //第一种打开方法: 调用enable 即可   
  2. boolean result = mBluetoothAdapter.enable();  
  3.   
  4. //   
  5. /第二种打开方法 ,调用系统API去打开蓝牙  
  6. if (!mBluetoothAdapter.isEnabled()) //未打开蓝牙,才需要打开蓝牙  
  7. {  
  8. Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);  
  9. startActivityForResult(intent, REQUEST_OPEN_BT_CODE);  
  10. //会以Dialog样式显示一个Activity , 我们可以在onActivityResult()方法去处理返回值  
  11. }  
//第一种打开方法: 调用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  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<BluetoothDevice> 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类中,稍后讲到)

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

 

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

  1. //扫描到了任一蓝牙设备   
  2. if(BluetoothDevice.ACTION_FOUND.equals(intent.getAction()))  
  3. {  
  4.    Log.v(TAG, "### BT BluetoothDevice.ACTION_FOUND ##");  
  5.                   
  6.    BluetoothDevice btDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);  
  7.                   
  8.    if(btDevice != null){  
  9.         Log.v(TAG , "Name : " + btDevice.getName() + " Address: " + btDevice.getAddress());  
  10.                       
  11.    }  
  12.    else if(BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(intent.getAction()))  
  13.    {  
  14.         Log.v(TAG, "### BT ACTION_BOND_STATE_CHANGED ##");  
  15.                   
  16.         int cur_bond_state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_NONE);  
  17.         int previous_bond_state = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.BOND_NONE);  
  18.                   
  19.                   
  20.         Log.v(TAG, "### cur_bond_state ##" + cur_bond_state + " ~~ previous_bond_state" + previous_bond_state);  
  21.     }  
  22. }  
//扫描到了任一蓝牙设备
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           表明没有绑定

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值