Java me j2me蓝牙客户端。函数startInquiry未找到任何内容

Java me j2me蓝牙客户端。函数startInquiry未找到任何内容,java-me,bluetooth,midp,Java Me,Bluetooth,Midp,我开发了简单的j2me蓝牙客户端,但在蓝牙设备搜索方面遇到了问题。 函数开始查找未找到任何内容 客户:诺基亚5220 服务器:带蓝牙适配器的我的电脑 所有蓝牙设备都已打开 /* *要更改此模板,请选择工具|模板 *然后在编辑器中打开模板。 */ import javax.microedition.midlet.*; 导入javax.bluetooth.*; 导入java.util.Vector; 导入javax.microedition.lcdui.*; /** *@authorАаааа */

我开发了简单的j2me蓝牙客户端,但在蓝牙设备搜索方面遇到了问题。 函数开始查找未找到任何内容

客户:诺基亚5220 服务器:带蓝牙适配器的我的电脑

所有蓝牙设备都已打开

/* *要更改此模板,请选择工具|模板 *然后在编辑器中打开模板。 */

import javax.microedition.midlet.*;
导入javax.bluetooth.*;
导入java.util.Vector;
导入javax.microedition.lcdui.*;
/**
*@authorАаааа
*/
公共类Midlet扩展Midlet实现DiscoveryListener
{
私有静态向量vecDevices=新向量();
私有静态字符串connectionURL=null;
专用本地设备本地设备;
私人发现代理人;
专用远程设备;
专用远程设备[]开发列表;
私人显示器;
私人形式;
公开作废startApp(){
display=display.getDisplay(这个);
表格=新表格(“客户”);
试一试{
localDevice=localDevice.getLocalDevice();
}捕获(BluetoothState例外){
e、 printStackTrace();
}
append(“地址:“+localDevice.getBluetoothAddress()+”\n\n”);
form.append(“名称:“+localDevice.getFriendlyName()+”\n\n”);
试一试{
agent=localDevice.getLocalDevice().getDiscoveryAgent();
表单.append(“启动设备查询…\n\n”);
布尔si=agent.startInquiry(DiscoveryAgent.GIAC,this);
if(si){
形式。附加(“真实”);
}否则{
格式。附加(“假”);
}
}捕获(BluetoothState例外){
}
int-deviceCount=vecDevices.size();
如果(设备计数0){
connectionURL=servRecord[0]。getConnectionURL(0,false);
}
}
//实现此方法,因为未发现服务
public void serviceSearchCompleted(int transID,int respCode){
}
}

不确定确切的问题是什么,但您肯定不希望在midlet的
startApp()方法中执行此操作。这是一种系统生命周期方法,应该会很快返回,但扫描蓝牙设备会在很长一段时间内阻止它。您的
startApp()
方法占用了设备的资源,而实际扫描可能需要这些资源


重构,使您的设备扫描在新线程中完成,然后查看发生了什么。

您说所有设备都打开了-但还要检查是否所有设备都可发现

我以前犯过这个错误


如果您想通过编程方式在模式之间切换,请查找LocalDevice.setDiscoverable()方法。

您似乎误解了蓝牙API的工作原理。
startInquiry
方法仅启动设备发现过程,然后立即返回,让发现在后台运行。当发现设备时,您会得到每个设备的
deviceDiscovered
方法的回调,当发现过程完成时,您会得到
inquiryCompleted
方法的回调。因此,您需要将
vecDevices
成员的访问和表单操作从
startApp
移动到
inquiryCompleted
,以便能够实际显示发现的信息

import javax.microedition.midlet.*;
import javax.bluetooth.*;
import java.util.Vector;
import javax.microedition.lcdui.*;

/**
 * @author Администратор
 */
public class Midlet extends MIDlet implements DiscoveryListener
{
    private static Vector vecDevices=new Vector();
    private static String connectionURL=null;
    private LocalDevice localDevice;
    private DiscoveryAgent agent;
    private RemoteDevice remoteDevice;
    private RemoteDevice[] devList;
    private Display display;
    private Form form;

    public void startApp() {
        display = Display.getDisplay(this);
        form = new Form( "Client" );
        try {
            localDevice = LocalDevice.getLocalDevice();
        } catch( BluetoothStateException e ) {
            e.printStackTrace();
        }

        form.append("Address: "+localDevice.getBluetoothAddress()+"\n\n");
        form.append("Name: "+localDevice.getFriendlyName()+"\n\n");

        try {
            agent = localDevice.getLocalDevice().getDiscoveryAgent();

            form.append("Starting device inquiry... \n\n");

            boolean si = agent.startInquiry(DiscoveryAgent.GIAC,  this);
            if ( si ) {
                form.append("true");
            } else {
                form.append("false");
            }
        } catch( BluetoothStateException e ) {
        }

        int deviceCount = vecDevices.size();
        if(deviceCount <= 0){
            form.append("No Devices Found .");
        }
        else{
            //print bluetooth device addresses and names in the format [ No. address (name) ]
            form.append("Bluetooth Devices: ");
            for (int i = 0; i < deviceCount; i++) {
                remoteDevice=(RemoteDevice)vecDevices.elementAt(i);
                form.append( remoteDevice.getBluetoothAddress() );
            }
        }

            display.setCurrent(form);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

        public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
              //add the device to the vector
              if(!vecDevices.contains(btDevice)){
                  vecDevices.addElement(btDevice);
              }
        }
        public void inquiryCompleted(int discType)
        {
        }


          //implement this method since services are not being discovered
          public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
              if(servRecord!=null && servRecord.length>0){
                  connectionURL=servRecord[0].getConnectionURL(0,false);
              }
          }
          //implement this method since services are not being discovered
          public void serviceSearchCompleted(int transID, int respCode) {
          }
}