WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章J2ME技术程序开发J2ME蓝牙程序开发实战入门

J2ME蓝牙程序开发实战入门
作者:yesky  来源:yesky  发布时间:2005-9-6 9:39:44
x(StupidBTMIDlet midlet) {
  super("");
  this.midlet=midlet;
  
  this.append(result);
  
  this.addCommand(new Command("取消",Command.CANCEL,1));
  this.setCommandListener(this);
  
  new Thread(this).start();
  }
  
  public void commandAction(Command arg0, Displayable arg1) {
  if(arg0.getCommandType()==Command.CANCEL){
  midlet.showMainMenu();
  }else{
  //匿名内部Thread,访问远程服务。
  Thread fetchThread=new Thread(){
  public void run(){
  for(int i=0;i<records.size();i++){
  ServiceRecord sr=(ServiceRecord)records.elementAt(i);
  if(accessService(sr)){
  //访问到一个可用的服务即可
  break;
  }
  }
  }
  };
  fetchThread.start();
  }
  
  }
  
  private boolean accessService(ServiceRecord sr){
  boolean result=false;
  try {
  String url = sr.getConnectionURL(
  ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);
  StreamConnection  conn = (StreamConnection) Connector.open(url);
  
  DataOutputStream dos=conn.openDataOutputStream();
  dos.writeUTF(input.getString());
  dos.close();
  DataInputStream dis=conn.openDataInputStream();
  String echo=dis.readUTF();
  dis.close();
  showInfo("反馈结果是:"+echo);
  result=true;
  
  } catch (IOException e) {
  
  }
  return result;
  }
  
  public synchronized void run() {
  //发现设备和服务的过程中,给用户以Gauge
  Gauge g=new Gauge(null,false,Gauge.INDEFINITE,Gauge.CONTINUOUS_RUNNING);
  this.append(g);
  showInfo("蓝牙初始化...");
  boolean isBTReady = false;
  
  try {
  
  LocalDevice localDevice = LocalDevice.getLocalDevice();
  discoveryAgent = localDevice.getDiscoveryAgent();
  
  isBTReady = true;
  } catch (Exception e) {
  e.printStackTrace();
  }
  
  if (!isBTReady) {
  showInfo("蓝牙不可用");
  //删除Gauge
  this.delete(1);
  return;
  }
  
  uuidSet = new UUID[2];
  
  //标志我们的响应服务的UUID集合
  uuidSet[0] = new UUID(0x1101);
  uuidSet[1] = ECHO_SERVER_UUID;
  
  try {
  discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this);
  } catch (BluetoothStateException e) {
  
  }
  
  try {
  //阻塞,由inquiryCompleted()回调方法唤醒
  wait();
  } catch (InterruptedException e1) {
  
  e1.printStackTrace();
  }
  showInfo("设备搜索完毕,共找到"+devices.size()+"个设备,开始搜索服务");
  transIDs = new int[devices.size()];
  for (int i = 0; i < devices.size(); i++) {
  RemoteDevice rd = (RemoteDevice) devices.elementAt(i);
  try {
  //记录每一次服务搜索的事务id
  transIDs[i] = discoveryAgent.searchServices(null, uuidSet,
  rd, this);
  } catch (BluetoothStateException e) {
  continue;
  }
  
  }
  
  try {
  //阻塞,由serviceSearchCompleted()回调方法在所有设备都搜索完的情况下唤醒
  wait();
  } catch (InterruptedException e1) {
  e1.printStackTrace();
  }
  
  showInfo("服务搜索完毕,共找到"+records.size()+"个服务,准备发送请求");
  if(records.size()>0){
  this.append(input);
  this.addCommand(new Command("发送",Command.OK,0));
  }

  
  //删除Gauge
  this.delete(1);
  
  }
  
  /**
  * debug
  * @param s
  */
  
  private void showInfo(String s){
  StringBuffer sb=new StringBuffer(result.getText());
  if(sb.length()>0){
  sb.append("\n");
  }
  sb.append(s);
  result.setText(sb.toString());
  
  }
  
  /**
  * 回调方法
  */
  
  public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
  
  if (devices.indexOf(btDevice) == -1) {
  devices.addElement(btDevice);
  }
  }
  
  /**
  * 回调方法,唤醒初始化线程
  */
  public void inquiryCompleted(int discType) {
  
  synchronized (this) {
  notify();
  }
  }
  /**
  * 回调方法
  */
  public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
  for (int i = 0; i < servRecord.length; i++) {
  records.addElement(servRecord[i]);
  }
  }
  
  /**
  * 回调方法,唤醒初始化线程
  */
  
  public void serviceSearchCompleted(int transID, int respCode) {
  
  for (int i = 0; i < transIDs.length; i++) {
  if (transIDs[i] == transID) {
  transIDs[i] = -1;
  break;
  }
  }
  
  //如果所有的设备都已经搜索服务完毕,则唤醒初始化线程。
  
  boolean finished = true;
  for (int i = 0; i < transIDs.length; i++) {
  if (transIDs[i] != -1) {
  finished = false;
  break;
  }
  }
  
  if (finished) {
  synchronized (this) {
  notify();
  }
  }
  
  }
  
  }
  ServerBox.java
  
  import java.io.DataInputStream;
  import java.io.DataOutputStream;
  import java.io.IOException;
  
  import java.util.Vector;
  
  import javax.bluetooth.DiscoveryAgent;
  import javax.bluetooth.LocalDevice;
  import javax.bluetoo

上一页  [1] [2] [3]  下一页

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码