单片机通过蓝牙与手机通信(一):android中的蓝牙

时间:2024-03-02 21:38:36
Technorati 标签: 蓝牙通信,单片机,android

最近需要利用现有的单片机通过蓝牙和手机进行通信,并且在手机中实现一定程度的控制。我只是稍微知道点android的开发,现在是在调研阶段。第一步调研的是利用手头有的android-sdk文件来初步了解android中蓝牙的使用。有关蓝牙通信的基本知识将在以后补充。

一、android中蓝牙支持

      安卓平台提供了蓝牙协议栈的支持,允许手机通过无线和其他蓝牙设备进行数据传输。应用程序通过安卓的Android Bluetooth APIs 能够实现蓝牙功能,实现点对点或者说对多点的无线传输功能,这些在API中都能轻易找到。

      android中所有的bluetooth API都在android.bluetooth包中,使用bluetooth APIs ,android设备能够实现:

  1)扫描其他蓝牙设备;

  2)询问当前适配器已配对设备;

  3)建立RFCOMM通道;

  4)通过设备发现链接到其他设备;

  5)传送或接受数据;

  6)管理多点连接。

      而为了通过蓝牙通信需要事先主要的四个任务:设置蓝牙适配器,查找已经配对的或者查找到的设备,建立连接,设备间传输数据。

二、建立蓝牙通信需要用的的类和接口

   BluetoothAdapter :蓝牙适配器类,是所有蓝牙通信的入口,用于发现设备,询问配对请求,通过已知的MAC地址识别设备 BluetoothDevice,并且建立用于监听的 BluetoothServerSocket。

   BluetoothDevice :远程蓝牙设备类,这个类的实例被用于通过 BluetoothSocket 或者设备的地址、名称等信息请求远程设备的连接。

   BluetoothSocket :是Bluetooth Socket 类(类似于TCP 的Socket套接字)。是一个允许该设备和其他蓝牙设备之间通过InputStream和OutputStream进行数据交换的连接点。

   BluetoothServerSocket :是一个用于监听其他设备发出的连接请求的类(类似于TCP的ServerSocket)。通过蓝牙连接两台android设备的时候,其中一台设备必须使用这个类开启一个Socket,当一远程设备向本设备发出蓝牙请求时,如果连接被允许,BluetoothServerSocket将返回一个连接号的BluetoothSocket 类的对象。

   BluetoothClass :是描述蓝牙设备普遍特征和属性的类。一系列的属性都是只读类型,定义了设备的各种设备的种类,但是,这个类的属性并不能完全描述所有的蓝牙配置和设备支持的服务,但是对于了解设备类型是很有用的。

   BluetoothProfile :接口,一个Bluetooth profile是设备间蓝牙通信的无线接口。(待完善)

   BluetoothHeadset :

   BluetoothA2dp :(完全不知道说什么)

   BluetoothProfile.ServiceListener

 

三、应用程序蓝牙权限的获取

      应用程序为了能够使用蓝牙,需要再程序中至少申明一到两种权限:BLUETOOTH 和 BLUETOOTH_ADMIN

      实现任何的蓝牙通信都需要发出蓝牙允许的请求,包括发出连接请求,接受连接请求,传输数据。

    

      为了初始化设备发现或者说操作蓝牙设置都必须申请获得 BLUETOOTH_ADMIN 权限,大多数的应用程序都仅仅是为了能够发现本地的蓝牙设备才需要这个权限,这个权限所能得到的其他应用一般都用不到。

权限申请范例:深入了解可以参照API 的 uses-permission

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