带OBEX推送的Android RFComm不工作

带OBEX推送的Android RFComm不工作,android,bluetooth,obex,Android,Bluetooth,Obex,我正试图将java应用程序改造成android应用程序,但我无法让它正常工作。该应用程序旨在与使用OBEX推送的设备进行对话。该设备无法进行任何传入连接,并且没有用户界面,只有一些指示灯 我试图重新制作的java代码片段如下: LocalDevice local; local = LocalDevice.getLocalDevice(); local.setDiscoverable(DiscoveryAgent.LIAC); String sConnectionURL = "btspp://lo

我正试图将java应用程序改造成android应用程序,但我无法让它正常工作。该应用程序旨在与使用OBEX推送的设备进行对话。该设备无法进行任何传入连接,并且没有用户界面,只有一些指示灯

我试图重新制作的java代码片段如下:

LocalDevice local;
local = LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.LIAC);
String sConnectionURL = "btspp://localhost:" + myUUID + ";name=" + obexName;
this.server = (StreamConnectionNotifier) Connector.open(sConnectionURL);
我不是java专家,但据我所知,这段代码应该注册一个名为obexName的SPP服务,并开始通过UUID myUUID侦听传入的连接。这正是我们想要的

当设备与运行java midlet的手机配对时,它将设置一个位,以使用手机上的UUID发送到SPP,或者根本不发送。如果在配对过程中找不到任何带有UUID的SPP,它将尝试使用普通OBEX连接到手机

这是我无法在android手机上使用的技术,既不是HTC英雄,也不是HTC Desire,都是版本2.1-update1。无论我如何尝试,手机只是连接到手机,而不是连接到所需的应用程序

我创建了一个类似developer.android.com上的示例的类:

private class AcceptThread extends Thread
{
    private final BluetoothServerSocket __serverSocket;

    public AcceptThread()
    {
        BluetoothServerSocket tmpSocket = null;

        trace("Creating AcceptThread");
        try 
        {
            trace("Starting to listen");
            tmpSocket = _bluetoothAdapter.listenUsingRfcommWithServiceRecord(obexName, myUUID);
            trace("Listening successful");
        } 
        catch (Exception e) 
        {
            trace("Listening NOT successful");
            // TODO: handle exception
        }
        __serverSocket = tmpSocket;
        trace("AcceptThread created");
    }

    public void run()
    {
        BluetoothSocket socket = null;
        trace("AcceptThread started");
        while(true)
        {
            try 
            {
                trace("Waiting for socket acceptance");
                socket = __serverSocket.accept();
                trace( "Socket accepted");
            } 
            catch (Exception e) 
            {
                trace("Error when accepting socket: " + e.getLocalizedMessage());
                break;
                // TODO: handle exception
            }
            if (socket != null)
            {
                synchronized (BTTransfer.this)
                {
                    trace("Socket exists");
                    try
                    {
                        __serverSocket.close();
                        trace("Socket successfully closed");
                    }
                    catch (Exception e) {}
                    break;
                }
            }
            trace("Socket does not exist");
        }
    }

    public void cancel()
    {
        try
        {
            __serverSocket.close();
        }
        catch (Exception e) {}
        trace("AcceptThread cancelled and Socket successfully closed");
    }
}
关于代码的注释:
跟踪函数是一个同步函数,将文本提供给处理程序对象,提供UI信息。
成功连接后,应用程序故意不做任何事情,只是关闭连接。
应用程序到达“等待套接字接受”,但此后再也没有到达跟踪

我有一个PC.NET应用程序,可以将自己伪装成设备,通过使用正确的UUID,它可以完美地工作,但是PC已经与手机配对,并且没有一个位说如果找不到指定的OBEX,它应该通过正常的OBEX发送

我已经研究这个问题好几天了,还没有找到解决办法。有人有什么想法吗

提前感谢,
/Trygg


关于第二条信息,我的意思是:

LocalDevice local;
local = LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.LIAC);
String sConnectionURL = "btspp://localhost:" + myUUID + ";name=" + obexName;
this.server = (StreamConnectionNotifier) Connector.open(sConnectionURL);
当设备与手机联系时,下拉菜单中会显示一条通知,告知设备正在联系。几秒钟后(取决于文件大小),文件被传输,并且会出现第二个通知,告知文件已传输。这是第二条“信息”

因为我监听设备的断开连接,然后客户通过我的程序已经知道文件被传输了,所以第二次通知完全没有用。不过,每次设备向手机发送文件时,它都会出现

不过,在我们对传奇和英雄的测试中,我们从未收到过第二次通知。这就是那些手机出现故障的地方。第一个通知出现,然后什么都没有,几秒钟后设备返回一个错误

希望这有助于澄清我的意思

/Trygg


我没有让它工作,但做了一些变通。我在事件BluetoothDevice.ACTION\u ACL\u上注册了一个BroadcastReceiver,然后检查断开连接的设备。如果是“我的”,我会在蓝牙收件箱中搜索文件


我从设备制造商那里得到一条消息,说它还不能工作,但他们正在开发新的固件。这就是为什么我没有在这里活动,也没有为更好的解决方案而工作。

请确定,您在Android清单中设置了正确的权限了吗

是的,我做了,或者至少我认为是这样。我认为如果它与PC一起工作,它应该是正确的?我在这方面取得了中等成功: