⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lanyasousuo.txt

📁 搜索蓝牙设备并通信的部分代码 因为是项目中的代码 很多只有部分源码和框架 仅供参考
💻 TXT
字号:
用J2ME搜索蓝牙设备并通信


代码来源于我目前的项目,所以不能给出完整代码(非常多),只给出关键代码,对于一般J2ME程序员绝对能看懂!


首先,给出J2ME搜索蓝牙设备的代码:
public void commandAction(Command command, Displayable displayable)
{
if(command==cmd_Search)
{
try 
{
LocalDevice localDevice = LocalDevice.getLocalDevice(); 
DiscoveryAgent discoveryAgent = localDevice.getDiscoveryAgent(); 
discoveryAgent.startInquiry(DiscoveryAgent.GIAC,new MyDiscoveryListener(this)); 
} 
catch (Exception e) 
{
MyClass.MessageBox("搜索出错,找不到蓝牙设备!", display); 
return; 
}

Menu.removeCommand(cmd_Search); 
}
} 
}


class MyDiscoveryListener implements DiscoveryListener {
//用于保存搜索到的设备
Vector devices = new Vector(); 
SearchDevices midlet; 

public MyDiscoveryListener(SearchDevices midlet) {
this.midlet = midlet; 
}

public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
devices.addElement(btDevice); 
}

public void inquiryCompleted(int discType) {
for (int i=0; i {
RemoteDevice btDevice = (RemoteDevice)devices.elementAt(i); 
try 
{
String device_address=btDevice.getBluetoothAddress(); //取得蓝牙设备的全球唯一地址
} 
catch (Exception e) {e.printStackTrace(); }
}
}
public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {}
public void serviceSearchCompleted(int transID, int responseCode) {}

}



接下来就是根据搜索所得的蓝牙设备地址来连接设备,并与设备通信:
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import javax.bluetooth.ServiceRecord; 
import javax.microedition.io.Connector; 
import javax.microedition.io.StreamConnection; 
import javax.microedition.lcdui.Command; 
import javax.microedition.lcdui.CommandListener; 
import javax.microedition.lcdui.Display; 
import javax.microedition.lcdui.Displayable; 
import javax.microedition.lcdui.Form; 
import javax.microedition.lcdui.TextField; 
import javax.microedition.midlet.MIDlet; 
import javax.microedition.midlet.MIDletStateChangeException; 

public class MIDlet_ConnDevice extends MIDlet 
implements Runnable, CommandListener {
private Display display = null; 


private Form form = new Form("蓝牙 "); 
//用于输入要发送的消息
private TextField tfData = new TextField("请输入发送的消息",
"",255,TextField.ANY); 

private Command cmdExit = new Command("退出", Command.EXIT, 0); 
private Command cmdSend = new Command("发送", Command.SCREEN, 1); 
private Command cmdConnect = new Command("连接", Command.SCREEN, 1); 

//线程运行标志
private boolean isRunning = true; 

StreamConnection client = null; 
//服务器服务记录
ServiceRecord record=null; 
private DataInputStream dis = null; 
private DataOutputStream dos = null; 

public MIDlet_ConnDevice() {
super(); 
form.append(tfData); 
form.addCommand(cmdExit); 
form.addCommand(cmdConnect); 
form.setCommandListener(this); 
}
protected void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this); 
display.setCurrent(form); 
}

protected void pauseApp() {
isRunning = false; 
close(); 
}

protected void destroyApp(boolean arg0)
throws MIDletStateChangeException {
isRunning = false; 
close(); 
}

/**
* 处理命令按钮事件
*/
public void commandAction(Command cmd, Displayable d) {
if (cmd == cmdExit) { 
isRunning = false; 
notifyDestroyed(); 
} else if(cmd == cmdSend) {
//发送数据
new Thread() {
public void run() {
if (dos == null) {
return; 
}
//把输入的字符串变为数字
try { 

dos.writeUTF(tfData.getString()); 
dos.flush(); 
} catch (IOException e) { 
form.append("Send error"); 
}
}
}.start(); 
} else if (cmd == cmdConnect) {
//开始服务器线程
new Thread(this).start(); 
}
} 

/**
* 客户端接收线程
*/
public void run() {
isRunning = true; 
client = null; 
String device_address; //搜索所得的设备地址
String conURL = "btspp://"+device_address+":1"; 
try {
client = (StreamConnection)Connector.open(conURL); 
form.append("Connected!\n"); 
dis = client.openDataInputStream(); 
dos = client.openDataOutputStream(); 
form.removeCommand(cmdConnect); 
form.addCommand(cmdSend); 
} catch (Exception e) {
form.append("connect error"); 
close(); 
return; 
}
while(isRunning) {
try {
if(dis.available()>1)
{
byte[] rec_package=new byte[dis.available()]; //强烈建议这里使用byte[]
dis.read(rec_package); 
String str=new String(rec_package); 
}
}
catch (Exception e) {
form.append("rec error"); 
break; 
}
}
close(); 
form.removeCommand(cmdSend); 
form.addCommand(cmdConnect); 
}

/**
* 关闭连接
*/
public void close() {
try {
if (dis != null) {
dis.close(); 
dis = null; 
}

if (dos != null) {
dos.close(); 
dos = null; 
}

if (client != null) {
client.close(); 
client = null; 
}
} catch (Exception e) {
e.printStackTrace(); 
}
}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -