Bluetoothchatはうまくいきません -- android フィールド と bluetooth フィールド 関連 問題

BluetoothChat doesn't work












2
vote

問題

日本語

こんにちは私はAndroidデバイス間の会話をしたいです。私はBluetoothChatを使用してこれを行うのではありませんが、他のデバイスから正しくデータを読み取ることはできません。

会話は:

Me:Privet

装置:P. 装置:リベット

あなたは私を助けることができますか?

プライベートクラスConnectedThreadスレッド{

<事前> <コード> EXC_BAD_ACCESS2
英語

Hello I want to make conversation between android devices. I use BluetoothChat to do this but it doesn't work I can't read correctly data from another device.

Conversation is :

Me: privet

Device: p Device: rivet

Can you help me?

private class ConnectedThread extends Thread {

    private final InputStream mmInStream;     private final OutputStream mmOutStream;      public ConnectedThread(BluetoothSocket socket) {         Log.d(TAG, "create ConnectedThread");         mmSocket = socket;         //InputStream tmpIn = null;         OutputStream tmpOut = null;         BufferedInputStream tmpIn=null;          int INPUT_BUFFER_SIZE=32;         // Get the BluetoothSocket input and output streams         try {             //tmpIn = socket.getInputStream();             tmpOut = socket.getOutputStream();             tmpIn = new BufferedInputStream(socket.getInputStream(),INPUT_BUFFER_SIZE);          } catch (IOException e) {             Log.e(TAG, "temp sockets not created", e);         }          mmInStream = tmpIn;         mmOutStream = tmpOut;     }      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;             }         }     } 
</div
     
   
   

回答リスト

1
 
vote

解決策の修正は、入力ストリームの読み取り()を呼び出した直後に、接続されているスレッドに文字列を作成し、その後文字列を表示のためにメインスレッドに渡します。どんな理由でも、スレッド間のバイト配列を渡すと、繰り返しとデータの損失が大きくなりました。

変更実行()コード:

<事前> <コード> public void run() { byte[] buffer = new byte[256]; // buffer store for the stream int bytes; // bytes returned from read() // Keep listening to the InputStream until an exception occurs while (true) { try { // Read from the InputStream bytes = mmInStream.read(buffer); String readMessage = new String(buffer, 0, bytes); // Send the obtained bytes to the UI Activity mHandler.obtainMessage(MESSAGE_READ, bytes, -1, readMessage) .sendToTarget(); } catch (IOException e) { break; } } }

とハンドラ受信:

<事前> <コード> case MESSAGE_READ: // Read in string from message, display to mainText for user String readMessage = (String) msg.obj; if (msg.arg1 > 0) { mainText.append(readMessage); }
 

The fix for the solution was to create the string in the connected thread, directly after calling read() on the InputStream, and then passing the string back to the main thread for display. For whatever reason, passing the byte array between threads led to significant repetition and data loss.

Modified run() code:

public void run() {     byte[] buffer = new byte[256];  // buffer store for the stream     int bytes; // bytes returned from read()      // Keep listening to the InputStream until an exception occurs     while (true) {         try {             // Read from the InputStream             bytes = mmInStream.read(buffer);             String readMessage = new String(buffer, 0, bytes);             // Send the obtained bytes to the UI Activity             mHandler.obtainMessage(MESSAGE_READ, bytes, -1, readMessage)                     .sendToTarget();         } catch (IOException e) {             break;         }     } } 

And the handler reception:

case MESSAGE_READ:         // Read in string from message, display to mainText for user         String readMessage = (String) msg.obj;         if (msg.arg1 > 0) {             mainText.append(readMessage);         } 
</div
 
 

関連する質問

5  Wiiバランスボードからデータを読み込む  ( Read data from wii balanceboard ) 
IMはWiiフィット(バランスボード)から出力を取得しようとしています。私は、C ++ Bluetooth列挙子を介してデバイスを見つけることができますが、Windowsソケットを介して接続しようとすると失敗します。 im誰かがそのような方向(C ++、...

0  Flutter:最初のRETURN文の後に機能をキャンセルします  ( Flutter cancel function after first return statement ) 
デバイス名を持つ特定のデバイスが見つかった場合にのみ、デバイスの検索を停止するだけでFlutter_Blueを使ってBluetoothアプリをプログラムしようとしています。問題は、whileループが1つだけではなく複数のデバイスオブジェクトを返し、そこからコー...

2  Bluetooth Printerを使用してAndroidアプリからデータを印刷する  ( Print data from android app using bluetooth printer ) 
レストランのためのAndroidアプリを開発しています。私のアプリから注文してから請求書を印刷したいです。印刷タスクにBluetoothプリンタを使用しています。 Bluetoothプリンタを使用してデータの印刷の経験を持つ任意のボディは、いくつかの適切な例で...

9  iPhone:より速いBluetoothのための最も便利なテクニックはどれですか?  ( Iphone which are the most useful techniques for faster bluetooth ) 
iPhoneのシュートエミュップにゲームキットを使ってピアツーピアブルートゥースを追加しているので、スピードは不可欠です。毎秒約40のメッセージを送信しています。ほとんどの場合、gksendDataunrelelibleが早く、すべてのシリアル化がnscod...

18  iPhone SDKでプログラムでBluetoothをオンにしますか?  ( Programmatically turn on bluetooth in the iphone sdk ) 
これについては多くの質問をしましたが、実際には実際に本当の回答(インポートするフレームワーク、実際のコードなど)はありません。彼らはプライベートAPIと言うだけで、それはあなたのアプリがApp Storeから拒否されます。 私は私のアプリが私のアプリが拒否され...

1  J2MEサービスの発見と発見可能な同時  ( J2me service discovery and discoverable same time ) 
簡単なクライアント/サーバーアプリケーションを書き込もうとします(すべてのアプリケーションはBluetoothサービスとクライアントです)。クライアントコードはBluetoothデバイスを見つけてローカルDBに登録します。しかし、問い合わせが実行されたときは発...

0  8ビットメッセージを書き込む  ( Write 8 bit message ) 
Bluetoothを介してバイトを送信する必要があります。この問題は、127より大きい番号を書く必要があるため、このスクリプトを使用できないことです。 <事前> <コード> mChatService.write(new byte[]{}); どうすればい...

10  HTML5 BluetoothとAudio  ( Html5 bluetooth and audio ) 
HTML 5 のHTML 5 しかし、Bluetoothの詳細はありません。 オーディオをストリーミングするBluetoothデバイスに接続しようとしています。 ブラウザのBluetooth経由でオーディオストリームをキャプチャするためのものですか? HT...

2  PCLコマンドをBluetooth Printerに送信します  ( Send pcl commands to bluetooth printer ) 
私はBTプリンタにPCLコマンドを送信するAndroidアプリを作成します(>> HP OfficeJet 100 )問題は、文字列データ(PCLコマンド)プリンタを送信し、これらのコマンドを認識して通常の文字列のようなすべてのコマンドを印刷した場合です。プリ...

2  Bluetoothchatはうまくいきません  ( Bluetoothchat doesnt work ) 
こんにちは私はAndroidデバイス間の会話をしたいです。私はBluetoothChatを使用してこれを行うのではありませんが、他のデバイスから正しくデータを読み取ることはできません。 会話は: Me:Privet 装置:P. 装置:リベット あなたは私...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有