2011-06-27 12 views
3

私はAndroidプログラミングの初心者で、Javaのコンセプトを持っています。ペアリングやパスワードなしでBluetoothを使用してデータを送受信するにはどうすればいいですか(私のアプリが両方のデバイスにインストールされている場合のみ)、 Androidでデータを送受信する方法ペアリングせずにBluetoothを使用してプログラミングするには?

+0

ソケットは、BTの部分をスキップし、Wifi(IP)経由で直接行くことができます。 BTの検索+ペアリングの手順をナビゲートするよりも簡単かもしれません。 – ethrbunny

+0

これ以上のガイド,,, –

+0

私は同じ問題を抱えています、私はデバイスをペアリングせずに、ブルートゥースでレンジファインダーから情報を受け取ろうとしています(そして私はそれが可能であることを100%確信しています)。何か解決策がありますか? –

答えて

1

私はthis Google groups post by Kristopher Micinskiから以下を得ました。 お手伝いをしてください。

これを実現する鍵は、mUuidのリストにあると思います。

これが何をしているかをよく見てください:

for (int i = 0; i < Connection.MAX_SUPPORTED && myBSock == null; i++) { 
    for (int j = 0; j < 3 && myBSock == null; j++) { 
     myBSock = getConnectedSocket(myBtServer, mUuid.get(i)); 
     if (myBSock == null) { 
      try { 
       Thread.sleep(200); 
      } catch (InterruptedException e) { 
       Log.e(TAG, "InterruptedException in connect", e); 
      } 
     } 
    } 
} 


このコードは何されているデバイスに接続するように見えますが、どのようにそれはそう ん?これは、ソケットを複数回試します。 に複数のUUIDを使用します。

つまり、は、のUUIDのみを使用できます。で、今

for (int i = 0; i < Connection.MAX_SUPPORTED && maxConnections > 0; i++) { 
    BluetoothServerSocket myServerSocket = mBtAdapter.listenUsingRfcommWithServiceRecord(srcApp, mUuid.get(i)); 
    BluetoothSocket myBSock = myServerSocket.accept(); 
    myServerSocket.close(); // Close the socket now that the 
    // connection has been made. 

    String address = myBSock.getRemoteDevice().getAddress(); 

    mBtSockets.put(address, myBSock); 
    mBtDeviceAddresses.add(address); 
    Thread mBtStreamWatcherThread = new Thread(new BtStreamWatcher(address)); 
    mBtStreamWatcherThread.start(); 
    mBtStreamWatcherThreads.put(address, mBtStreamWatcherThread); 
    maxConnections = maxConnections - 1; 
    if (mCallback != null) { 
     mCallback.incomingConnection(address); 
    } 
} 

:だからではなく、7つのUUIDを使用して、この アプリケーションの実装には、サーバがリッスンして は、サーバー側で各UUIDを受け付け、これは 次のコードで行われているものです何が行われているのクライアント側?クライアントは、現在サーバーに存在するアクティブな接続の数を把握していません( )。

我々はいくつかのクライアントは、我々は 単純にこれを使用することができます使用する必要があることを順番に合意している場合は、我々は「正しいものを見つける。」まで、しかし、我々の場合には、我々は単純に順番に各UUID を試してみてください

ショートバージョン: - 複数のUUIDを使用すると、一度に1つしか使用できません。したがって、ピコネット使用の場合は最大7を定義し、それぞれを試してください。 あなたが正しいものを見つけるまで。

+0

しかし親愛なる私は両方を送受信したい、私はアンドロイドに1つの文字列を送信するようにアンドロイドも私を送信します,,,,,クライアントとサーバーの両方のデバイスを意味するので、何を言うのですか? –

+0

いったん接続しようとすると(明らかに)クライアント/サーバが誰であるかは関係ありません。彼らはメッセージを交換するだけです。両方のプロセスには、完全なメッセージが記録されるまで、文字をトラップする 'socket-> read'のブロックプロセスがいくつかあります。その後、メッセージを処理して対応します。 – ethrbunny

2

は、私の知る限りでは、それはまたはをペアリングすることなく、RFCOMMソケットを介してデータを受け取る送信することは不可能です。私は開発しているアプリケーションでこれを広範囲に試しました。私の結果は以下のとおりです。

  • 2台のデバイスをペアリングして見つけ、双方向通信は、2つのデバイスがペアになっている
  • 場合は可能ですが、している場合は、「サーバ」のデバイス(Androidデバイスをしようとしている1 )ない発見は、双方向通信に設定されているに接続する2つのデバイスがペアリングされていないが、「サーバ」デバイスが発見ある場合、ペアリング要求がまだ前に必要とされる
  • 依然として可能です双方向通信が可能です。つまり、RFCOMM クライアントソケット(つまり、、Androidのデバイス)では、デバイスをペアにする必要があります。これは、Android 2.2を実行しているSamsung Captivateでテストされました。 RFCOMMサーバソケットを許可する前にペアリングが必要だが、クライアントソケットのペアリングを必要とすることは理解できますが、これは非常に奇妙です。

@ethrbunnyは、WiFiを使用して、各デバイスでパラレルサーバー/クライアントスレッドを設定し、必要なものを送信することもできます。ローカルネットワーク上のサービスを検出するには、オプションでzeroconfを使用できます。

+0

すべてのペアデバイスに次々にメッセージを送信することが可能です。 – Venkat