2011-02-02 3 views
1

私はここでいくつかのスレッドを通過していますが、私が走っている問題の答えを見つけられませんでした。アンドロイドブルートゥースチャットアプリ(デバイスが直ちに接続を失う)

マイセットアップ: 私は、アンドロイドのNexus S電話と通信するための仮想シリアルポートとして使用しているMac PCを持っています。携帯電話でブルートゥースのチャットアプリを実行し、私がセットアップしたvirt commと話すためにそれをクライアントとして使用します。

最初は、2つのアンドロイド携帯電話でbluetoothチャットアプリを試してみました。私はテキストを前後に送ることができます。

私の使用例: 私はRFidタグを読み取り、データをアンドロイド携帯電話に送信して情報を収集しています。

現在、自分のPCを使用して自分のデバイスを表現しています。問題には、[OK]

++++++++++++++++++ 、

私は自分の携帯電話からPCに接続しようと最初に私は、「接続を取得します。 ... "ステータスバーが更新され、15秒後に"私はPCに接続しています "というトーストメッセージが表示されますが、すぐに"デバイスの接続が切断されました "というトーストがあります。ステータスバーが「接続されていません」と表示されます

デバッガをステップ実行すると、Bluetoothチャットアプリケーションの次の部分でエラーが発生したように見えます。私はlogcatで見てみると具体的に、この行(bytes = mmInStream.read(buffer);は)

public void run() { 
     Log.i(TAG, "BEGIN mConnectedThread"); 
     byte[] buffer = new byte[1024]; 
     int bytes; 

     // Keep listening to the InputStream while connected 
     while (true) { 
      try { 
       // Read from the InputStream 
       bytes = mmInStream.read(buffer); 

       // Send the obtained bytes to the UI Activity 
       mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer) 
         .sendToTarget(); 
      } catch (IOException e) { 
       Log.e(TAG, "disconnected", e); 
       connectionLost(); 
       break; 
      } 
     } 
    } 

、I/O例外は、入力ストリームの読み取り()のための "software caused connection abort" です。

質問: これは私の仮想ポートが正しくセットアップされていないことと関係がありますか? /dev/tty.Nexusで入力を受け取るのを待っています。 screenコマンド@ 9600ボーを使用

それ以外の場合は、何らかの理由で入力ストリームが接続されているソケットが使用できない可能性があります。私はログに記録し、NULLではないようです。私はステップスルーするたびに、ConnectThreadではなく、ConnectedThreadで死にます。

コードの次の部分:特にこの線(mmSocket.connect();

 public void run() { 
     Log.i(TAG, "BEGIN mConnectThread"); 
     setName("ConnectThread"); 

     // Always cancel discovery because it will slow down a connection 
     mAdapter.cancelDiscovery(); 

     // Make a connection to the BluetoothSocket 
     try { 
      // This is a blocking call and will only return on a 
      // successful connection or an exception 
      mmSocket.connect(); 
     } catch (IOException e) { 
      connectionFailed(); 
      // Close the socket 
      try { 
       mmSocket.close(); 
      } catch (IOException e2) { 
       Log.e(TAG, "unable to close() socket during connection failure", e2); 
      } 
      // Start the service over to restart listening mode 
      BluetoothChatService.this.start(); 
      return; 
     } 

     // Reset the ConnectThread because we're done 
     synchronized (BluetoothChatService.this) { 
      mConnectThread = null; 
     } 

     // Start the connected thread 
     connected(mmSocket, mmDevice); 
    } 

ソケット変数によるマルチスレッドにスコープを失っているとソケットの周りに渡されるのだろうか?

ありがとうございました

答えて

0

Mac PCで仮想シリアルポストを設定する方法。あなたは2つの携帯電話でアプリを実行しようとしていて、それが動作しているので、私は問題がPC上にあると思う。

AndroidおよびJava Bluetooth hereに関する記事を投稿しました。それが助けてくれることを願って。

関連する問題