📄 btclient.java
字号:
import javax.bluetooth.*;
import java.util.*;
import javax.microedition.io.*;
import java.io.*;
/**
* 该类用于客户端查找蓝牙设备,搜索蓝牙服务,建立到蓝牙服务器的连接。
*/
public class BTClient implements Runnable, DiscoveryListener {
private static final String uuidString = "00112233445566778899AABBCCDDEEFF";
private GobangMIDlet midlet;
private DiscoveryAgent agent; //搜索代理对象
private Vector deviceList; //蓝牙设备列表
private ServiceRecord record; //搜索到的服务
private int transID;
//构造方法,创建蓝牙客户端
public BTClient(GobangMIDlet midlet) throws BluetoothStateException {
this.midlet = midlet;
deviceList = new Vector();
//获取蓝牙设备实例
LocalDevice localDevice = LocalDevice.getLocalDevice();
//获取搜索代理,该代理对象负责搜索附件的蓝牙设备和蓝牙设备上的服务。
agent = localDevice.getDiscoveryAgent();
}
//开始搜索
public void startDiscover() {
Thread t = new Thread(this);
t.start();
}
//搜索线程的执行体
public void run() {
try {
//开始查找附近的蓝牙设备,该方法不会阻塞当前线程。
agent.startInquiry(DiscoveryAgent.GIAC, this);
synchronized(this) {
try {
//阻塞当前线程,等待查询蓝牙设备结束。
this.wait();
}
catch(InterruptedException ie) {
//
}
}
//开始搜索服务
int n = deviceList.size();
UUID[] uuids = {new UUID(uuidString, false)};
int i = 0;
while(i<n && record == null) {
RemoteDevice rDevice = (RemoteDevice)deviceList.elementAt(i);
//搜索rDevice设备上的服务,该方法不会阻塞当前线程。
transID = agent.searchServices(null, uuids, rDevice, this);
synchronized(this) {
try {
//阻塞当前线程,等待查询服务结果
this.wait();
}
catch(InterruptedException ie) {
//
}
}
i++;
}
//创建连接
if(record != null) {
String url = record.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);
StreamConnection sconn = (StreamConnection)Connector.open(url);
midlet.startPlay(new BTConnection(midlet, sconn));
}
}
catch(BluetoothStateException bse) {
//bse.printStackTrace();
}
catch(IOException ioe) {
//ioe.printStackTrace();
}
}
public void stopDiscover() {
if(record == null) {
agent.cancelServiceSearch(transID);
}
}
//DiscoveryListener接口中的方法。
//在远程蓝牙设备中搜索到蓝牙服务时,底层实现自动调用该方法,该方法可以被多次调用。
public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
if(record == null) {
record = servRecord[0];
}
}
//DiscoveryListener接口中的方法。
//在远程蓝牙设备中搜索蓝牙服务结束时,底层实现自动调用该方法。
public void serviceSearchCompleted(int transID, int respCode) {
synchronized(this) {
this.notifyAll();
}
}
//DiscoveryListener接口中的方法。
//查找到蓝牙设备时,底层实现自动调用该方法,该方法可以被多次回调。
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
if(cod.getMajorDeviceClass() == 0x200) {
deviceList.addElement(btDevice);
}
}
//DiscoveryListener接口中的方法
//蓝牙设备查找结束时,底层实现自动调用该方法。
public void inquiryCompleted(int discType) {
synchronized(this) {
notifyAll();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -