一、

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 BluetoothAdaptergetDefaultAdapter ()

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

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

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

4.1、打开蓝牙:

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

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

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

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

的状态而发生改变。

代码示例分别如下:

//第一种打开方法: 调用enable 即可

booleanresult = mBluetoothAdapter.enable();

//

/第二种打开方法 ,调用系统API去打开蓝牙

if(!mBluetoothAdapter.isEnabled())//未打开蓝牙,才需要打开蓝牙

{

Intent intent = newIntent(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 (Stringname)

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

public Set getBondedDevices ()

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

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

public

static

boolean checkBluetoothAddress (String address)

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

返回值: true 设备地址有效

false

设备地址无效

public BluetoothDevicegetRemoteDevice (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类中,稍后讲到)

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

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

//扫描到了任一蓝牙设备

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());

}

elseif(BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(intent.getAction()))

{

Log.v(TAG, "### BT ACTION_BOND_STATE_CHANGED ##");

intcur_bond_state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_NONE);

intprevious_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介绍,请参考农民伯伯的博客:

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

BLUETOOTH值为

"android.permission.BLUETOOTH"

BLUETOOTH_ADMIN 值为

"android.permission.BLUETOOTH_ADMIN"

二、

BluetoothDevice类介绍

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

1、 蓝牙绑定(Bound)状态 ,

即蓝牙设备是否与其他蓝牙绑定

int

BOND_BONDED表明蓝牙已经绑定

int

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

bounding

int

BOND_NONE 表明没有绑定

android 蓝牙相关的类,Android中BluetoothAdapter类简介相关推荐

  1. Android 蓝牙相关的广播

    2019独角兽企业重金招聘Python工程师标准>>> Android 蓝牙相关的广播 监听蓝牙相关的广播并获得相关的信息,蓝牙相关的广播主要集中在BluetoothAdapter和 ...

  2. android蓝牙广播自定义,Android 蓝牙相关的广播

    Android 蓝牙相关的广播 监听蓝牙相关的广播并获得相关的信息,蓝牙相关的广播主要集中在BluetoothAdapter和BluetoothDevice类中, 可以通过在AndroidManife ...

  3. android 蓝牙相关广播,Android 蓝牙相关的广播

    Android 蓝牙相关的广播 监听蓝牙相关的广播并获得相关的信息,蓝牙相关的广播主要集中在BluetoothAdapter和BluetoothDevice类中, 可以通过在AndroidManife ...

  4. 标准布局类(11中布局类)

    2019独角兽企业重金招聘Python工程师标准>>> <div class="box"><div id="myAuto" ...

  5. Android 蓝牙在不同系统版本中使用的不同的蓝牙版本

    我要查看兼容性文档最初是想看看,Android 系统不同版本中使用的蓝牙版本是哪一个,在网上百度了一下有些连接还被墙了,后来发现在Android开发者里面也有,记录一下 链接:https://sour ...

  6. android蓝牙设置特征属性,Android BLE蓝牙详细解读(二)

    上篇文章主要介绍了关于BLE的一些基础操作,我们能够大概了解到蓝牙操作的一些流程,上文末介绍了本人的一个BLE开源库,支持蓝牙一对多的连接方式,该库封装了蓝牙的开启.扫描.连接.断开.连接超时...一 ...

  7. android蓝牙配对 自动联接,Android系统下蓝牙自动配对连接方法

    Android系统下蓝牙自动配对连接方法 [专利摘要]本发明涉及一种Android系统下蓝牙自动配对连接方法,其包括如下步骤:步骤1.在Android设备端内存储上次进行蓝牙连接蓝牙外设的蓝牙地址,并 ...

  8. android 蓝牙hf编程,基于Android蓝牙Inband ring功能实现.doc

    基于Android蓝牙Inband ring功能实现 基于Android蓝牙Inband ring功能实现 [摘要] 蓝牙作为一种短距无线数据与语音传输的开放性全球规范,目前在整个世界范围内都得到了很 ...

  9. android蓝牙开发搜素,Android蓝牙开发(一)之打开蓝牙和设备搜索

    一.判断是否系统是否支持蓝牙 在使用蓝牙之前,我们首先要判断手机设备是否支持蓝牙,虽然现在基本都支持蓝牙了,但是为了代码的严谨性我们还是需要在代码中判断: private BluetoothManag ...

最新文章

  1. 在WP7下自定义RelativeSource 的Binding
  2. JVM调优:常见垃圾回收器组合
  3. WEB攻击手段及防御-扩展篇
  4. C语言中数组所占字节怎么算
  5. MATLAB GUI的CreateFcn如何创建
  6. 安卓下设置系统字体大小影响H5页面布局
  7. 如何跨越线程调用窗体控件?(1)
  8. 暴跌3000亿,“酱茅”怎么了?
  9. 入门指南_Spring Boot2: 快速入门指南
  10. 如何用计算机管理员权限,计算机管理员权限在哪里设置_电脑系统如何设置管理员权限-win7之家...
  11. Galaxy Fold上市时间推延 屏幕瑕疵是主因
  12. 趋势预测算法大PK!
  13. Nginx是如何处理一个HTTP请求的
  14. 91卫图助手下载器永久免费啦!!
  15. java工厂模式应用场景_详解Java设计模式之《简单工厂模式》
  16. Tera Term 工具的使用
  17. 经纬财富:新乡怎么炒白银能挣到钱?
  18. matlab 超分辨率,matlab超分辨率
  19. 计算机科学中宏一般指,在EXCEL中工具里面的宏是什么意思、有什么用途?
  20. 优秀WordPress版微信小程序推荐(二)

热门文章

  1. java解析json天气api,使用Postman获取天气接口API(Json格式)
  2. BNN - 基于low-bits量化压缩的跨平台深度学习框架
  3. 推荐适合胖mm大码 连衣裙 显瘦女装穿搭
  4. k8s node节点重启后遇到的问题及解决
  5. 计算机分区容量计算公式,100g等于多少mb?电脑分区100g是多少mb?电脑100g内存等于多少mb?...
  6. sql数据库习题总集
  7. mysql 免安装版 启动_Windows下配置启动免安装版本mysql
  8. 信号与系统 chapter7 因果与非因果
  9. c语言中void和define,C语言里面的内联函数(inline)与宏定义(#define)探讨
  10. 系统工程(SE)学习笔记(四)——系统架构设计