Android Bluetooth蓝牙技术初体验

 更新时间:2016年02月13日 17:31:53   作者:pengkv  
这篇文章主要介绍了Android Bluetooth蓝牙技术初体验的相关资料,需要的朋友可以参考下

一:Bluetooth包简介

Android平台提供了一个android.bluetooth的包,里面实现蓝牙设备之间通信的蓝牙API。总共有8个类,常用的四个类如下:

BluetoothAdapter类

代表了一个本地的蓝牙适配器。它是所有蓝牙交互的入口点。利用它你可以发现其他蓝牙设备,查询绑定了的设备,使用已知的MAC地址实例化一个蓝牙设备和建立一个BluetoothServerSocket(作为服务器端)来监听来自其他设备的连接。

BluetoothDevice类

代表了一个远端的蓝牙设备,使用它请求远端蓝牙设备连接或者获取远端蓝牙设备的名称、地址、种类和绑定状态(其信息是封装在BluetoothSocket中)。

BluetoothSocket类

代表了一个蓝牙套接字的接口(类似于TCP中的套接字),它是应用程序通过输入、输出流与其他蓝牙设备通信的连接点。

BlueboothServerSocket类

代表打开服务连接来监听可能到来的连接请求(属于server端),为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。当远端设备发起连接连接请求的时候,并且已经连接到了的时候,BlueboothServerSocket类将会返回一个BluetoothSocket。

二:常用类的使用

BluetoothAdapter:蓝牙适配器

cancelDiscovery()取消探索,当我们正在搜索设备的时候调用这个方法将不再继续搜索
disable()关闭蓝牙
enable()打开蓝牙,这个方法打开蓝牙不会弹出提示,更多的时候我们需要问下用户是否打开,以下两行代码同样是打开蓝牙,但会提示用户:

Intentenabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(enabler);
getAddress()获取本地蓝牙地址
getDefaultAdapter()获取默认BluetoothAdapter,实际上,也只有这一种方法获取BluetoothAdapter
getName()获取本地蓝牙名称
getRemoteDevice(String address)根据蓝牙地址获取远程蓝牙设备
getState()获取本地蓝牙适配器当前状态
isDiscovering()判断当前是否正在查找设备,是则返回true
isEnabled()判断蓝牙是否打开,已打开返回true,否则返回false
listenUsingRfcommWithServiceRecord(String name,UUID uuid)根据名称,UUID创建并返回BluetoothServerSocket,这是创建BluetoothSocket服务器端的第一步
startDiscovery()开始搜索,这是搜索的第一步

BluetoothDevice:远程蓝牙设备

createRfcommSocketToServiceRecord(UUIDuuid)根据UUID创建并返回一个BluetoothSocket,这个方法也是我们获取BluetoothDevice
的目的——创建BluetoothSocket

这个类其他的方法,如getAddress()、getName()等,同BluetoothAdapter。

BluetoothSocket:客户端

//这个类一共有6个方法
close()关闭
connect()连接
isConnected()判断是否连接
getInptuStream()获取输入流
getOutputStream()获取输出流
getRemoteDevice()获取BluetoothSocket指定连接的远程蓝牙设备

BluetoothServerSocket:服务端

//这个类一共有4个方法
accept()
accept(int timeout)
close()关闭
getChannel()返回这个套接字绑定的通道

两者的区别在于后面的方法指定了过时时间,需要注意的是,执行这两个方法的时候,直到接收到了客户端的请求(或是过期之后),都会阻塞线程,应该放在新线程里运行。还有一点需要注意的是,这两个方法都返回一个BluetoothSocket,最后的连接也是服务器端与客户端的两个BluetoothSocket的连接

三:数据传输

蓝牙数据传输——服务器端

1、获得BluetoothAdapter。
2、通过BluetoothAdapter.listenUsingRfcommWithServiceRecord(name,UUID uuid)方法创建BluetoothServerSocket对象。
3、通过luetoothServerSocket.accept()方法返回一个BluetoothSocket对象。由于该方法处于阻塞状态,需要开启线程来处理。
4、通过BluetoothSocket.getInputStream()和BluetoothSocket.getOutputStream()方法获得读写数据的InputStream和OutputStream对象。
5、通过InputStream.read()方法来读数据。通过OutputStream.write()方法来写数据。

蓝牙数据传输——客户端

1、获得BluetoothAdapter。
2、通过BluetoothAdapter.getRemoteDevice(String address)获得指定地址的BluetoothDevice对象。
3、通过BluetoothDevice.createRfcommSocketToServiceRecord (UUID uuid)方法创建BluetoothSocket对象。
4、通过BluetoothSocket.connect()方法来连接蓝牙设备。
5、通过BluetoothSocket.getInputStream()和BluetoothSocket.getOutputStream()方法获得读写数据的InputStream和OutputStream对象。
6、通过InputStream.read()方法来读数据。通过OutputStream.write()方法来写数据。

四:Tip

UUID

// UUID:全局唯一标识符,格式为:8-4-4-4-12
// 两个蓝牙设备进行连接需要使用同一个UUID

<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permissionandroid:name="android.permission.BLUETOOTH" />

以上所述是小编给大家分享的Android Bluetooth蓝牙技术初体验的相关内容,下篇将给大家介绍Android Bluetooth蓝牙技术使用流程详解,感兴趣的朋友可以点击了解详情。

相关文章

  • Android Studio 导入新工程项目图解

    Android Studio 导入新工程项目图解

    这篇文章主要介绍了Android Studio 导入新工程项目图解,需要的朋友可以参考下
    2017-12-12
  • flutter直接上传文件到阿里云oss

    flutter直接上传文件到阿里云oss

    上传视频到oss,之前是走后端上传到oss,会有一个问题就是我要先上传给后端,后端再上传给oss就会导致上传多次,消耗时间过长影响用户体验,所以我参考文档写了直接上传到阿里云oss获取到文件访问路径。
    2021-05-05
  • Kotlin函数式编程超详细介绍

    Kotlin函数式编程超详细介绍

    一个函数式应用通常由三大类函数构成:变换transform、过滤filters合并combineo每类函数都针对集合数据类型设计,目标是产生一个最终结果。函数式编程用到的函数生来都是可组合的,也就是说,你可以组合多个简单函数来构建复杂的计算行为
    2022-09-09
  • Android 创建与解析XML(五)——详解Dom4j方式

    Android 创建与解析XML(五)——详解Dom4j方式

    本篇文章主要介绍了Android创建与解析XML(二)——详解Dom4j方式,这里整理了详细的代码,有需要的小伙伴可以参考下。
    2016-11-11
  • Android最新版本开发环境搭建图文教程

    Android最新版本开发环境搭建图文教程

    这篇文章主要为大家详细介绍了Android最新版本开发环境搭建图文教程,重点在于配置JDK,以及adt-bundle,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android Jni的简单使用详解

    Android Jni的简单使用详解

    这篇文章主要介绍了Android Jni的简单使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Android仿开心消消乐大树星星无限循环效果

    Android仿开心消消乐大树星星无限循环效果

    这篇文章主要为大家详细介绍了Android仿开心消消乐大树星星无限循环效果,自定义view实现效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • 详解Android中通过Intent类实现组件间调用的方法

    详解Android中通过Intent类实现组件间调用的方法

    Intent能够实现应用间的数据交互与通讯,将实现者和调用者解耦,接下来就来详解Android中通过Intent类实现组件间调用的方法,需要的朋友可以参考下
    2016-05-05
  • Android中RecyclerView上拉下拉,分割线,多条目的实例代码

    Android中RecyclerView上拉下拉,分割线,多条目的实例代码

    这篇文章主要介绍了Android中RecyclerView上拉下拉,分割线,多条目的实例代码,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-01-01
  • Android仿手机通讯录地址选择功能

    Android仿手机通讯录地址选择功能

    这篇文章主要为大家详细介绍了Android仿手机通讯录地址选择功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12

最新评论