2011-10-05 12 views
5

मुझे एंड्रॉइड 2.3 डिवाइस पर एक इन-ऐप ओबीएक्स सर्वर सेट अप करने की आवश्यकता है। ब्लूटूथ चैट नमूना कोड का उपयोग करके मैं एक ओबीएक्स सर्वर स्थापित करने में सक्षम था। हालांकि, सर्वर एक कस्टम UUID का उपयोग करें ताकि सेवा एक 'OBEX सर्वर'Android पर OBEX पुश सर्वर को कार्यान्वित करना 2.3

# 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 सर्वर का उपयोग नहीं करना चाहते हैं - इस एप्लिकेशन में हो गया है। मैंने ब्लूकॉव की कोशिश की है, लेकिन जब मैंने सेवा पंजीकृत करने में समस्याएं आईं तो मैंने इसे छोड़ दिया।

हां, मैंने this पोस्ट देखा और इसमें link पढ़ा, लेकिन मूर्खता से, एक आसान तरीका होना चाहिए!

उत्तर

3

मैं प्रोटोकॉल अपने आप को लागू करने समाप्त हो गया। जैसा कि मैंने कल्पना की थी यह बालों वाली नहीं थी। चूंकि मैं केवल एक विशिष्ट ग्राहक से कनेक्ट होने की उम्मीद कर रहा था और मुझे पता था कि क्लाइंट केवल एक फ़ाइल को दबाएगा, मैं केवल प्रोटोकॉल के केवल उन हिस्सों को आंशिक रूप से कार्यान्वित करने में सक्षम था जो मुझे चाहिए था।

कुछ प्रलेखन कि OBEX प्रोटोकॉल को समझने के साथ मदद पर Obex13.pdf थे: http://gitorious.org/gammu/gsm-docs/trees/e5161a75fb1e1c1608959b27ae3c3940bcf0911b/standards/obex

कैसे मैं सॉकेट इनपुट धारा पार्स का एक त्वरित टुकड़ा: (। नोट OBEXUtils और OBEXConstants मेरी वर्ग हैं)

OBEXConstant की
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; 
+0

आप पूरे समाधान आपके द्वारा किए गए, GoogleCode या GitHub पर प्रदान कर सकता है? मुझे एक ब्लूटूथ डिवाइस से कुछ एंड्रॉइड फोन पर सर्वर के रूप में कार्य करने की आवश्यकता है। लेकिन मुझे इसके लिए कोई समाधान नहीं मिल रहा है .. अग्रिम धन्यवाद :) –

+0

दुर्भाग्य से स्रोत अब ग्राहक कॉपीराइट द्वारा संरक्षित है। एंड्रॉइड एसडीके ब्लूटूथ चैट उदाहरण एक अच्छा प्रारंभिक बिंदु है। फिर आप ओबीएक्स प्रोटोकॉल को लागू करने के लिए ऊपर पोस्ट किए गए कोड का उपयोग कर सकते हैं। – tuxGurl

+0

जैसा कि मैं समझता हूं कि आप इस डिवाइस से फ़ाइलों को प्राप्त करने के लिए डिवाइस और ओबेक्स ओपीपी से कनेक्ट करने के लिए एंड्रॉइड ब्लूटूथ लाइब्रेरी का उपयोग कर रहे हैं? अगर मैं पूछूं, यह किस तरह का उपकरण था? धन्यवाद। –

संबंधित मुद्दे