`
javayestome
  • 浏览: 1040931 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Android蓝牙API之BluetoothSocket类(1)

阅读更多

前面两篇文章中我们提到了有关Android平台蓝牙的配对、发现、启用等操作,本文开始通过BluetoothSocket类建立有关蓝牙通讯的套接字。从Android 2.0开始支持这一特性,蓝牙和LAN一样通过MAC地址来识别远程设备,建立完通讯连接RFCOMM通道后以输入、输出流方式通讯。

一、连接设备

蓝牙通讯分为server服务器端和client客户端,它们之间使用BluetoothSocket 类的不同方法来获取数据,

1. 作为服务器

如果一个设备需要和两个或多个设备连接时,就需要作为一个server来传输,在android中提供了BluetoothServerSocket类来处理用户发来的信息,服务器端套接字在接受(accepted) 一个客户发来的BluetoothSocket时作出相应的响应。示例代码如下:

private class AcceptThread extends Thread {
private final BluetoothServerSocket cwjServerSocket;

public AcceptThread() {
BluetoothServerSocket tmp = null; //使用一个临时对象代替,因为cwjServerSocket定义为final
try {
tmp = myAdapter.listenUsingRfcommWithServiceRecord(NAME, CWJ_UUID);//服务仅监听
} catch (IOException e) { }
cwjServerSocket = tmp;
}

public void run() {
BluetoothSocket socket = null;
while (true) {//保持连接直到异常发生或套接字返回
try {
socket = cwjServerSocket.accept(); //如果一个连接同意
} catch (IOException e) {
break;
}

if (socket != null) {
manageConnectedSocket(socket); //管理一个已经连接的RFCOMM通道在单独的线程。
cwjServerSocket.close();
break;
}
}
}

public void cancel() { //取消套接字连接,然后线程返回
try {
cwjServerSocket.close();
} catch (IOException e) { }
}
}

在这里android开发网提醒大家需要注意的是服务器一般处理多个任务不嫩阻塞,必须使用异步的方法这里我们开了一个线程,目前Android的虚拟机上层没有提供I/O模型,这里我们以后会讲解高负载情况下性能优化解决方案。

2. 作为客户端

以便初始化一个连接到远程设备,首先必须获取本地的BluetoothDevice对象,相关的方法在我们 Android蓝牙API之BluetoothAdapter类 的两篇文章中有讲到,这里不再赘述,相关的示例代码如下:

private class ConnectThread extends Thread {
private final BluetoothSocket cwjSocket;
private final BluetoothDevice cwjDevice;

public ConnectThread(BluetoothDevice device) {
BluetoothSocket tmp= null;
cwjDevice
= device;

try {
tmp= device.createRfcommSocketToServiceRecord(CWJ_UUID);//客户端创建
} catch (IOException e) { }
cwjSocket
= tmp;
}

public void run() {
myAdapter.cancelDiscovery(); //取消发现远程设备,这样会降低系统性能

try {
cwjSocket.connect();
} catch (IOException connectException) {
try {
cwjSocket
.close();
} catch (IOException closeException) { }
return;
}

manageConnectedSocket(cwjSocket); //管理一个已经连接的RFCOMM通道在单独的线程。
}

public void cancel() {
try {
cwjSocket
.close();
} catch (IOException e) { }
}
}

经过上面的介绍我们可以看到在Android平台上使用蓝牙通讯相对比较方便和简单,有关数据的具体通讯我们将在下次Android蓝牙API之BluetoothSocket类(2)讲到manageConnectedSocket的具体实现。

分享到:
评论

相关推荐

    android 蓝牙API整理

    总结来说,Android蓝牙API提供了一套全面的工具,使开发者能够构建各种类型的蓝牙应用,包括但不限于文件传输、健康监测设备的控制、游戏同步等。理解并熟练运用这些API,开发者可以充分利用蓝牙技术,实现设备间的...

    Android 蓝牙API详解

    **Android蓝牙API详解** 在Android平台上,蓝牙技术是设备间通信的重要途径,广泛应用于数据传输、设备配对、物联网(IoT)等场景。Android提供了丰富的蓝牙API,使得开发者能够轻松实现蓝牙功能,包括经典蓝牙...

    android_bluetooth_BluetoothSocket.rar_android

    深入研究源代码可以帮助我们理解Android蓝牙通信的底层工作原理,包括如何在操作系统层面建立和维护蓝牙连接,以及如何优化数据传输性能。这对于开发高效且可靠的蓝牙应用至关重要。同时,源代码可能包含了一些错误...

    Android蓝牙广播通信

    Android提供了一个名为BluetoothAdapter的类,它是Android蓝牙功能的主要入口点。通过这个类,我们可以检查蓝牙是否开启,扫描附近的蓝牙设备,并建立连接。当我们要监听蓝牙设备的状态变化时,就需要用到广播通信。...

    android蓝牙通信技术文档

    Android 蓝牙 API 中的主要类有: * BluetoothAdapter 类:代表了一个本地的蓝牙适配器。 * BluetoothDevice 类:代表了一个远端的蓝牙设备。 * BluetoothSocket 类:代表了一个蓝牙套接字的接口。 * ...

    Android 蓝牙开发,蓝牙连打印机

    首先,理解Android蓝牙API是基础。Android提供了BluetoothAdapter类,它是系统蓝牙服务的主要接口,用于查找、配对和管理蓝牙设备。开发者需要通过BluetoothAdapter.getDefaultAdapter()获取系统的默认蓝牙适配器,...

    android 蓝牙SPP传输demo

    2. **Android蓝牙API**: - Android提供了`BluetoothAdapter`类来管理蓝牙适配器,用于检测蓝牙是否开启、查找设备等。 - `BluetoothDevice`类代表一个蓝牙设备,用于获取设备信息、建立连接等操作。 - `...

    android蓝牙聊天源代码

    1. **Android Bluetooth API**: Android提供了`BluetoothAdapter`类来管理蓝牙适配器,`BluetoothDevice`类代表蓝牙设备,`BluetoothSocket`类则用于创建连接和传输数据。这些类是构建蓝牙应用的基础。 2. **蓝牙...

    Android蓝牙开发客户端代码

    首先,我们需要理解蓝牙技术的基本概念,然后我们将详细讨论Android蓝牙开发客户端的实现步骤。 蓝牙是一种短距离无线通信技术,允许电子设备之间进行数据交换。在Android中,蓝牙功能主要通过`BluetoothAdapter`、...

    Android蓝牙录音

    Android蓝牙API主要由`BluetoothAdapter`、`BluetoothDevice`、`BluetoothSocket`和`BluetoothServerSocket`等类组成。`BluetoothAdapter`是系统蓝牙功能的主要入口,可以用来发现设备、配对和管理蓝牙连接。`...

    android蓝牙间传输demo

    在"android蓝牙间传输demo"中,"MyApplication1"很可能包含了实现这些功能的源代码。通过查看和分析这些代码,开发者可以学习到如何在实际项目中应用蓝牙通信。此外,需要注意的是,由于蓝牙的安全性和稳定性问题,...

    Android蓝牙设备之间通过UUID通信

    首先,我们要了解Android中的蓝牙API。Android提供了`BluetoothAdapter`,`BluetoothDevice`,`BluetoothServerSocket`和`BluetoothSocket`等类来处理蓝牙连接。`BluetoothAdapter`是系统的蓝牙适配器,可以用来开启...

    Android蓝牙,配对,搜索,连接,通信,断开的Demo

    本项目"Android蓝牙,配对,搜索,连接,通信,断开的Demo"是一个使用Kotlin编写的Android应用示例,它涵盖了蓝牙功能的基本操作,包括设备的搜索、配对、取消配对、连接、数据传输以及断开连接等核心环节。...

    安卓wifi蓝牙相关-Android蓝牙2.0串口通信代码自动搜索自动连接.rar

    1. **Android蓝牙API**: Android提供了BluetoothAdapter类来管理设备的蓝牙功能,包括开启/关闭蓝牙、查找附近的蓝牙设备、建立连接等。BluetoothGatt类则用于与蓝牙低功耗(BLE)设备交互,但这里提到的是蓝牙2.0...

    Android蓝牙串口调试助手 蓝牙通信 透传模块

    理解蓝牙通信的基本概念、Android蓝牙API的使用,以及串口参数设置的重要性,对于有效利用这款工具至关重要。在实际操作中,结合这些知识点,开发者可以更好地理解和解决蓝牙通信中遇到的各种问题。

    Android 经典蓝牙连接,多台蓝牙设备同时连接,全站仪连接

    1. **Android 蓝牙API**:Android提供了丰富的Bluetooth API,包括`BluetoothAdapter`、`BluetoothDevice`、`BluetoothSocket`和`BluetoothServerSocket`等类,用于设备搜索、连接、数据传输和管理。开发者需要先...

    Android蓝牙程序实例

    在Android平台上,蓝牙技术是一种广泛使用的短距离无线通信方式,用于设备间的文件传输、数据共享以及设备控制等。...同时,不断关注Android蓝牙API的更新,以便利用新特性提高应用的性能和用户体验。

    android蓝牙demo实现通讯功能

    而`API.docx`应该详细介绍了所使用的Android蓝牙API,包括BluetoothAdapter、BluetoothDevice、BluetoothServerSocket、BluetoothSocket等类的使用方法和注意事项。 至于`Bluetooth`文件,可能是包含实际蓝牙通信...

    android 蓝牙4.0 和2.0

    在Eclipse环境中开发Android蓝牙应用,你需要导入Android SDK对应的蓝牙库,并遵循Android的生命周期管理,确保在适当的时候启动和停止蓝牙操作,避免资源泄漏和性能问题。 在"MyBluetooth"这个项目中,我们可以...

    android 蓝牙数据传输DEMO

    1. **蓝牙API**:Android提供了`BluetoothAdapter`、`BluetoothDevice`、`BluetoothServerSocket`和`BluetoothSocket`等类来处理蓝牙连接和通信。这些类位于`android.bluetooth`包中,是进行蓝牙操作的基础。 2. **...

Global site tag (gtag.js) - Google Analytics