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编程实现canvas绘制饼状统计图功能示例【自动适应条目数量与大小】

    Android编程实现canvas绘制饼状统计图功能示例【自动适应条目数量与大小】

    这篇文章主要介绍了Android编程实现canvas绘制饼状统计图功能,可实现自动适应条目数量与大小的功能,涉及Android基于canvas的图形绘制相关操作技巧,需要的朋友可以参考下
    2017-01-01
  • Flutter 网络请求框架封装详解

    Flutter 网络请求框架封装详解

    这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • android实现音乐播放器

    android实现音乐播放器

    这篇文章主要为大家详细介绍了android实现音乐播放器,拥有播放、暂停、重新播放和停止等功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • 在Flutter中让文字Text换行的实现步骤

    在Flutter中让文字Text换行的实现步骤

    在Flutter中,Text小部件默认会尝试在其父小部件的约束内显示所有文本内容,如果父小部件没有提供足够的空间或没有设置约束限制,Text小部件可能无法正确换行,本文给大家介绍了在Flutter中如何让文字Text换行,需要的朋友可以参考下
    2024-07-07
  • Android IPC机制Messenger实例详解

    Android IPC机制Messenger实例详解

    这篇文章主要介绍了 Android IPC机制Messenger实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • Flutter上的数据监控深入理解

    Flutter上的数据监控深入理解

    这篇文章主要给大家介绍了关于Flutter上的数据监控的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Flutter具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • android原生实现多线程断点续传功能

    android原生实现多线程断点续传功能

    这篇文章主要为大家详细介绍了android原生实现多线程断点续传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • Android带气泡的第三方Tab选项卡

    Android带气泡的第三方Tab选项卡

    这篇文章主要介绍了Android带气泡的第三方Tab选项卡的实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • Android 实现加载大图片的方法

    Android 实现加载大图片的方法

    对于超大的图片,如果不缩放的话,容易导致内存溢出。而经过处理后,无论多大的图片,都能够在手机屏幕上加载出来,不会导致内存溢出。本文将对Android 加载大图片的实现方法进行介绍,下面跟着小编一起来看下吧
    2017-04-04
  • Android普通对话框用法实例分析

    Android普通对话框用法实例分析

    这篇文章主要介绍了Android普通对话框用法,以实例形式较为详细的分析了Android对话框的创建技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09

最新评论