本文来自http://blog.youkuaiyun.com/hellogv/
由于代码来自我目前的项目,所以不能给出完整代码(非常多),只给出关键代码,对于一般J2ME程序员绝对看得懂!
首先,给出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<devices.size();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();
}
}
}
rel="File-List" href="file:///G:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_filelist.xml" />