【问题标题】:Android RFComm with OBEX Push not working带有 OBEX 推送的 Android RFComm 不起作用
【发布时间】:2011-04-07 06:13:19
【问题描述】:

我正在尝试将一个 java 应用程序重新制作成一个 android 应用程序,但我无法让它工作。该应用程序旨在与使用 OBEX Push 的设备通信。该设备无法接受任何传入连接,并且它没有用户界面,但有一些 LED。

我要重制的java代码sn-p如下:

LocalDevice local;
local = LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.LIAC);
String sConnectionURL = "btspp://localhost:" + myUUID + ";name=" + obexName;
this.server = (StreamConnectionNotifier) Connector.open(sConnectionURL);

我不是 java 专家,但据我所知,这个 sn-p 应该注册一个名为 obexName 的 SPP 服务,并开始通过 UUID myUUID 监听传入连接。这按预期工作。

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

这是我无法在 2.1-update1 版本的 HTC Hero 和 HTC Desire 上使用的技术。无论我怎么尝试,手机都只是连接到手机,而不是按照需要连接到应用程序。

我创建了一个类似于 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");
    }
}

关于代码的评论:
跟踪函数是一个同步函数,向 Handler 对象提供文本,提供 UI 信息。
应用程序故意在连接成功后关闭连接。
应用程序到达“等待套接字接受”,但之后再也没有跟踪。

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

我已经为此工作了几天,但无法提出解决方案。有没有人有任何想法?

提前致谢,
/试一试


第二条消息我的意思是:

当设备联系电话时,下拉菜单中会显示通知,告知设备正在联系。几秒钟后(取决于文件大小)文件被传输,并且有第二个通知告诉文件被传输。这是第二个“信息”。

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

不过,在我们对 Legend 和 Hero 的测试中,我们从未收到过第二次通知。这就是那些手机失败的地方。第一个通知来了,然后什么都没有,几秒钟后设备返回一个错误。

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

/Trygg


我没有得到这个工作,但做了一种解决方法。我在事件 BluetoothDevice.ACTION_ACL_DISCONNECTED 上注册了一个 BroadcastReceiver,然后检查了哪些设备已断开连接。如果是“我的”,我会搜索蓝牙收件箱中的文件。

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

【问题讨论】:

标签: android bluetooth obex


【解决方案1】:

为了确定,您是否在 Android 清单中设置了正确的权限?

【讨论】:

  • 是的,我做到了,或者至少我是这么认为的。我想如果它与PC一起工作,它应该是正确的?
猜你喜欢
  • 1970-01-01
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多