在Android 2.3上实现OBEX推送服务器

在Android 2.3上实现OBEX推送服务器,android,bluetooth,Android,Bluetooth,我需要在安卓2.3设备上设置应用程序内OBEX服务器。使用蓝牙聊天示例代码,我能够设置OBEX服务器。但是,服务器需要使用自定义UUID,因此该服务未注册为“OBEX服务器” # sdptool browse local ...(snip)... Service Name: OBEX Object Push Service RecHandle: 0x10000 Service Class ID List: UUID 128: ab123abc-1a2b-3c4d-5d7f-123456789

我需要在安卓2.3设备上设置应用程序内OBEX服务器。使用蓝牙聊天示例代码,我能够设置OBEX服务器。但是,服务器需要使用自定义UUID,因此该服务未注册为“OBEX服务器”

# sdptool browse local
...(snip)...
Service Name: OBEX Object Push
Service RecHandle: 0x10000
Service Class ID List:
  UUID 128: ab123abc-1a2b-3c4d-5d7f-1234567890ab
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 18
因此,当我收到数据时,看起来我正在接收原始OBEX连接请求:

80 00 07 10 00 04 00 00 00 00 ...(snip)... 00 00 00 (1kb file)
是否有我可以使用的OBEX实现,或者我必须自己实现协议

我不想使用内置OBEX服务器-这必须在应用程序中。我曾经尝试过BlueCove,但在注册服务时遇到问题,我放弃了它


是的,我确实看到了这篇文章并读了其中的内容,但天哪,一定有更简单的方法

也许这有帮助:

我最终自己实现了这个协议。它不像我想象的那样毛茸茸的。因为我只希望有一个特定的客户端连接,而且我知道客户端只会推送一个文件,所以我只能部分实现协议中我需要的部分

一些有助于理解OBEX协议的文档是Obex13.pdf,网址为:

我如何解析套接字输入流的快速片段: (注意OBEXUtils和OBEXConstants是我的类。)


你能在Google Code或github上提供你所做的全部解决方案吗?我需要将som数据从蓝牙设备传输到我的android手机,作为服务器。但我找不到任何解决方案…提前谢谢:)不幸的是,该源代码现在受客户端版权保护。android SDK蓝牙聊天示例是一个很好的起点。然后,您可以使用上面发布的代码开始实施OBEX协议。据我所知,您只是使用android蓝牙库与设备连接,而OBEX OPP只是用于从该设备接收文件?如果我可以问一下,这是什么样的装置?谢谢。这是一个手持蓝牙扫描仪。您是否使用Obex对象推送的UUID来监听输入连接?UUID为:000011105-0000-1000-8000-00805F9B34FB。使用方法如下:tmp=adapter.listenusingrfcommwithservicecerecord(device.getName(),UUID.fromString(000011105-0000-1000-8000-00805F9B34FB));
try
{
    //Read all bytes passed in
    bytes = mmInStream.read(buffer);

    //Ensure we have the entire packet before we proceed
    // Packet length is in the 1st and 2nd byte
    expectedLength = OBEXUtils.bytesToShort(buffer[OBEXConstant.LENGTH_IDENTIFIER],
        buffer[OBEXConstant.LENGTH_IDENTIFIER + 1]);

    packetLength = bytes;

    //Keep reading until we get what we expect.
    while (packetLength < expectedLength)
    {
        bytes = mmInStream.read(buffer, packetLength, maxPacketSize);
        packetLength += bytes;
    }

    //Switch on Packet Header
    switch (buffer[OBEXConstant.HEADER_IDENTIFIER])
    {
        case OBEXConstant.CONNECT:
            //Parse the packet and return an acknowledgement packet
            write(OBEXConnect.parsePacket(buffer));
            break;

        case OBEXConstant.PUT:
        case OBEXConstant.PUT_FINAL:
            //Parse the PUT packet and return an acknowledgement packet
            //For Parsing PUT packets I referred to the android and bluecove implementations
            write(putPacket.appendPacket(buffer, packetLength));
            break;

        case OBEXConstant.DISCONNECT:
            //Parse the packet and return an acknowledgement packet
            write(OBEXDisconnect.parsePacket(buffer));
            break;

        case OBEXConstant.GET:
        case OBEXConstant.GET_FINAL:
        case OBEXConstant.SETPATH:
        case OBEXConstant.SETPATH_FINAL:
        case OBEXConstant.SESSION:
            //Did not implement these
            break;

        case OBEXConstant.ABORT:
            Log.w(Constant.TAG, TAG + "ABORT Request Received");
            isDisconnected = true;
            break;

        default:

            break;
    }
}
catch (final IOException e)
{
    ...(snip)...
}
public static final byte FINAL_BIT = (byte) 0x80;

public static final byte CONNECT = 0x00 | FINAL_BIT; //*high bit always set Connect choose your partner, negotiate capabilities
public static final byte DISCONNECT = 0x01 | FINAL_BIT; //*high bit always set Disconnect signal the end of the session
public static final byte PUT = 0x02; //(0x82) Put send an object
public static final byte PUT_FINAL = PUT | FINAL_BIT;
public static final byte GET = 0x03; //(0x83) Get get an object
public static final byte GET_FINAL = GET | FINAL_BIT; //(0x83) Get get an object
public static final byte SETPATH = 0x05;
public static final byte SETPATH_FINAL = SETPATH | FINAL_BIT;
public static final byte SESSION = 0x07;
public static final byte ABORT = (byte) 0xFF;

public static final byte OBEX_RESPONSE_CONTINUE = (byte) 0x90;
public static final byte OBEX_RESPONSE_SUCCESS = (byte) 0xA0;