2011-10-05 23 views
5

Android 2.3デバイスでアプリ内OBEXサーバーをセットアップする必要があります。 Bluetoothチャットのサンプルコードを使用して、OBEXサーバーをセットアップすることができました。Android 2.3でOBEX PUSHサーバーを実装する

:ただし、サーバーは、私がデータを受信したとき、私は生のOBEXの接続要求を受け付けておりますようなので、それが見えるサービスが「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 

として登録されていないので、カスタムのUUIDを使用する必要があります

80 00 07 10 00 04 00 00 00 00 ...(snip)... 00 00 00 (1kb file) 

OBEX実装は使用できますか、それとも自分でプロトコルを実装する必要はありますか?

私はinbuilt OBEXサーバーを使いたくありません。これはアプリ内になければなりません。私はBlueCoveを試しましたが、サービスを登録する際に問題が発生したときに放棄しました。

はい、私はthisの投稿を見て、それにlinkを読んでいましたが、ゴリによって、より簡単な方法が必要です!

答えて

3

私は、プロトコルを自分で実装することになりました。私が想像していたように毛がかっていませんでした。特定のクライアントだけが接続することを期待していたので、クライアントが1つのファイルをプッシュしていることが分かっていたので、必要なプロトコルの部分だけを部分的に実装できました。 http://gitorious.org/gammu/gsm-docs/trees/e5161a75fb1e1c1608959b27ae3c3940bcf0911b/standards/obex

私はソケットの入力ストリームを解析された方法の簡単なスニペット: (注OBEXUtilsとOBEXConstantsは私のクラスである。)

OBEXプロトコルを理解することを手伝ってくれましたいくつかのドキュメントがでObex13.pdfました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の上で、あなたが作った全体のソリューションを提供してもらえますか?私は、BluetoothデバイスからsomデータをAndroid端末に送信し、サーバーとして機能する必要があります。しかし、私はこのための解決策を見つけることができません..事前にお祈り:) –

+0

残念ながら、ソースは現在クライアントの著作権によって保護されています。 Android SDKのbluetoothチャットの例は良い出発点です。上記のコードを使用して、OBEXプロトコルの実装を開始することができます。 – tuxGurl

+0

私はこのデバイスからファイルを受信するためにAndroidデバイスのBluetoothライブラリをデバイスとOBEX OPPに接続するだけであることを理解していますか?もし私が尋ねることができるなら、これはどんな種類の装置ですか?ありがとう。 –

関連する問題