?? btclient.java
字號(hào):
import javax.bluetooth.*;
import java.util.*;
import javax.microedition.io.*;
import java.io.*;
/**
* 該類(lèi)用于客戶(hù)端查找藍(lán)牙設(shè)備,搜索藍(lán)牙服務(wù),建立到藍(lán)牙服務(wù)器的連接。
*/
public class BTClient implements Runnable, DiscoveryListener {
private static final String uuidString = "00112233445566778899AABBCCDDEEFF";
private GobangMIDlet midlet;
private DiscoveryAgent agent; //搜索代理對(duì)象
private Vector deviceList; //藍(lán)牙設(shè)備列表
private ServiceRecord record; //搜索到的服務(wù)
private int transID;
//構(gòu)造方法,創(chuàng)建藍(lán)牙客戶(hù)端
public BTClient(GobangMIDlet midlet) throws BluetoothStateException {
this.midlet = midlet;
deviceList = new Vector();
//獲取藍(lán)牙設(shè)備實(shí)例
LocalDevice localDevice = LocalDevice.getLocalDevice();
//獲取搜索代理,該代理對(duì)象負(fù)責(zé)搜索附件的藍(lán)牙設(shè)備和藍(lán)牙設(shè)備上的服務(wù)。
agent = localDevice.getDiscoveryAgent();
}
//開(kāi)始搜索
public void startDiscover() {
Thread t = new Thread(this);
t.start();
}
//搜索線(xiàn)程的執(zhí)行體
public void run() {
try {
//開(kāi)始查找附近的藍(lán)牙設(shè)備,該方法不會(huì)阻塞當(dāng)前線(xiàn)程。
agent.startInquiry(DiscoveryAgent.GIAC, this);
synchronized(this) {
try {
//阻塞當(dāng)前線(xiàn)程,等待查詢(xún)藍(lán)牙設(shè)備結(jié)束。
this.wait();
}
catch(InterruptedException ie) {
//
}
}
//開(kāi)始搜索服務(wù)
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設(shè)備上的服務(wù),該方法不會(huì)阻塞當(dāng)前線(xiàn)程。
transID = agent.searchServices(null, uuids, rDevice, this);
synchronized(this) {
try {
//阻塞當(dāng)前線(xiàn)程,等待查詢(xún)服務(wù)結(jié)果
this.wait();
}
catch(InterruptedException ie) {
//
}
}
i++;
}
//創(chuàng)建連接
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接口中的方法。
//在遠(yuǎn)程藍(lán)牙設(shè)備中搜索到藍(lán)牙服務(wù)時(shí),底層實(shí)現(xiàn)自動(dòng)調(diào)用該方法,該方法可以被多次調(diào)用。
public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
if(record == null) {
record = servRecord[0];
}
}
//DiscoveryListener接口中的方法。
//在遠(yuǎn)程藍(lán)牙設(shè)備中搜索藍(lán)牙服務(wù)結(jié)束時(shí),底層實(shí)現(xiàn)自動(dòng)調(diào)用該方法。
public void serviceSearchCompleted(int transID, int respCode) {
synchronized(this) {
this.notifyAll();
}
}
//DiscoveryListener接口中的方法。
//查找到藍(lán)牙設(shè)備時(shí),底層實(shí)現(xiàn)自動(dòng)調(diào)用該方法,該方法可以被多次回調(diào)。
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
if(cod.getMajorDeviceClass() == 0x200) {
deviceList.addElement(btDevice);
}
}
//DiscoveryListener接口中的方法
//藍(lán)牙設(shè)備查找結(jié)束時(shí),底層實(shí)現(xiàn)自動(dòng)調(diào)用該方法。
public void inquiryCompleted(int discType) {
synchronized(this) {
notifyAll();
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -