public final class BluetoothSocket
extends Object
implements Closeable
java.lang.Object | |
↳ | android.bluetooth.BluetoothSocket |
连接或连接蓝牙插座。
蓝牙套接口类似于TCP套接字: Socket
和ServerSocket
。 在服务器端,使用BluetoothServerSocket
创建侦听服务器套接字。 当连接被BluetoothServerSocket
接受时,它将返回一个新的BluetoothSocket
来管理连接。 在客户端,使用单个BluetoothSocket
来启动传出连接并管理连接。
最常见的蓝牙套接字类型是RFCOMM,它是Android API支持的类型。 RFCOMM是一种通过蓝牙实现的面向连接的流媒体传输。 它也被称为串行端口配置文件(SPP)。
要创建一个BluetoothSocket
,用于连接到已知的设备,使用BluetoothDevice.createRfcommSocketToServiceRecord()
。 然后致电connect()
尝试连接到远程设备。 此呼叫将阻塞,直到连接建立或连接失败。
要创建 BluetoothSocket
作为服务器(或“主机”),请参阅 BluetoothServerSocket
文档。
连接套接字后,无论是作为客户端启动还是作为服务器接受,都可以通过调用 getInputStream()
和 getOutputStream()
来打开IO流,以分别检索自动连接到套接字的对象 InputStream
和 OutputStream
。
BluetoothSocket
是线程安全的。 特别是, close()
将始终立即中止正在进行的操作并关闭套接字。
注意:需要 BLUETOOTH
权限。
有关使用蓝牙的更多信息,请阅读 Bluetooth开发人员指南。
Constants |
|
---|---|
int |
TYPE_L2CAP L2CAP套接字 |
int |
TYPE_RFCOMM RFCOMM插座 |
int |
TYPE_SCO SCO套接字 |
Public methods |
|
---|---|
void |
close() 关闭此流并释放与其关联的所有系统资源。 |
void |
connect() 尝试连接到远程设备。 |
int |
getConnectionType() 获取底层连接的类型。 |
InputStream |
getInputStream() 获取与此套接字关联的输入流。 |
int |
getMaxReceivePacketSize() 获取底层传输的最大支持接收数据包大小。 |
int |
getMaxTransmitPacketSize() 获取底层传输的最大支持传输数据包大小。 |
OutputStream |
getOutputStream() 获取与此套接字关联的输出流。 |
BluetoothDevice |
getRemoteDevice() 获取此套接字连接或连接到的远程设备。 |
boolean |
isConnected() 获取此套接字的连接状态,即是否存在与远程设备的活动连接。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface java.io.Closeable
|
|
From interface java.lang.AutoCloseable
|
void connect ()
尝试连接到远程设备。
此方法将阻塞,直到建立连接或连接失败。 如果此方法没有异常返回,则此套接字现在已连接。
设备发现过程中,不应尝试创建与远程蓝牙设备的新连接。 设备发现是蓝牙适配器上的一个重量级过程,会显着降低设备连接速度。 使用cancelDiscovery()
取消正在进行的发现。 发现不是由Activity管理的,而是作为系统服务运行的,因此即使应用程序没有直接请求发现,也应该始终调用cancelDiscovery()
,这是可以肯定的。
close()
可用于从另一个线程中止此调用。
Throws | |
---|---|
IOException |
on error, for example connection failure |
int getConnectionType ()
获取底层连接的类型。
Returns | |
---|---|
int |
one of TYPE_RFCOMM , TYPE_SCO or TYPE_L2CAP |
InputStream getInputStream ()
获取与此套接字关联的输入流。
即使套接字尚未连接,输入流也会返回,但对该流的操作将抛出IOException,直到关联的套接字连接。
Returns | |
---|---|
InputStream |
InputStream |
Throws | |
---|---|
IOException |
int getMaxReceivePacketSize ()
获取底层传输的最大支持接收数据包大小。 使用它可以优化在输入流上完成的读取操作,因为任何调用读取操作都会返回最大字节数量 - 或者对于某些传输操作来说,该值为倍数。
Returns | |
---|---|
int |
the maximum supported Receive packet size for the underlying transport. |
int getMaxTransmitPacketSize ()
获取底层传输的最大支持传输数据包大小。 使用它来优化对输出套接字的写操作,以避免发送半满数据包。
Returns | |
---|---|
int |
the maximum supported Transmit packet size for the underlying transport. |
OutputStream getOutputStream ()
获取与此套接字关联的输出流。
即使套接字尚未连接,输出流也会返回,但对该流的操作将抛出IOException,直到连接相关套接字为止。
Returns | |
---|---|
OutputStream |
OutputStream |
Throws | |
---|---|
IOException |
BluetoothDevice getRemoteDevice ()
获取此套接字连接或连接到的远程设备。
Returns | |
---|---|
BluetoothDevice |
remote device |
boolean isConnected ()
获取此套接字的连接状态,即是否存在与远程设备的活动连接。
Returns | |
---|---|
boolean |
true if connected false if not connected |