0

BluetoothChat サンプル アプリケーションを使用するアプリケーションに取り組んでいます。私の主な活動では、外部ページをロードする webview を使用しています。外部ページをロードする JavaScript を介して Bluetooth 機能を処理しています。基本的に、次の行を介して Javascript とネイティブ コード間のブリッジを追加します。

myWebView.addJavascriptInterface(new WebAppInterface(this,myWebView), "Android");//I pass a refference to the context and a refference to the webview. 

WebAppInterface は、Javascript から呼び出すことができるすべてのパブリック メソッドを持つクラスです。このクラスには、enableBluetooth、disableBluetooth、listBoundedDevices、connect などのメソッドがあります。

BluetoothChat サンプル アプリケーションの BluetoothSerialService クラスを使用しています。私のデバイスは、コマンドを受信し、入力に応じて異なる方法で応答する組み込みデバイスに接続する必要があります。例は次のようになります: webview のボタンを押すと、次のネイティブ コードが呼び出されます。

while(true){
    out.write(requestKey);//send command - where "out" is the OutputStream
    key = in.read();//get response - where "in" is the InputStream
    if(key==KEY1){
        out.write(activateRFID);//send command - activateRFID
        rfidTag = in.read();//get response - RFID Tag
        updateUI(rfidTag);//perform function - update the UI with the tag 
    }
    else if(key==KEY2){
        out.write(deactivateRFID);//send command  - deactivate RFID
        response = in.read();//get response
    }
    else if(key==KEY3){
        out.write(anotherCommand);//send command  - 
        response = in.read();//get response
    }
}

私が達成しようとしているのは、コマンドを別のデバイスに送信し(押されたキーを要求)、機能を実行することです。これは常に発生する必要があります (押されたキーのデバイスをプールし、特定の機能を実行します)。

デバイスをプールする 1 つの SINGLE THREAD を開始するにはどうすればよいですか (OutputStream に書き込み、InputStream からの応答を読み取ります)。BluetoothChat サンプル アプリケーションの動作は少し異なります。BluetoothChatSevice.write() を呼び出すたびに、mHandler を介して UI にメッセージを送信する ConnectedThread 実行メソッドを介して応答を取得します。

すべての提案を歓迎します。

4

1 に答える 1

0

今日やった。outputStream に書き込むたびに、inputStream からも読み取り、mHandler を使用して readBuffer を UI に送信するブール関数 readWrite() を実行することをお勧めします。読み取りと書き込みの両方に問題がない場合は true を返し、どちらかが失敗した場合は false を返し、ConnectedThread を閉じる前に resetConection を使用します。resetConnection については、こちらの回答を参照してください。Android 4.2 から Android 4.3 へのアップデート後、Bluetooth SPP プロファイルを使用するアプリケーションが機能しない

しかし、プーリングに関する答えは次のとおりです。 ConnectedThread run() メソッドで while(true) を実行し、ループ内で readWrite(byte[] data) と同様のメソッドを呼び出します。最初にデバイスに何かを書き込みます。 、次に入力ストリームから (デバイスから) データを読み取ります。この readWrite() メソッドでは、outpustream への書き込みが正常に行われた場合は、inputstream からの読み取りを続行します。入力ストリームにデータを取得した場合は、mHandler で処理するためにデータを UI に送信します (または、UI に送信する前に何らかの処理を行います)。

それは私にとってとてもうまくいきました。

于 2013-09-26T18:50:51.120 に答える