web-dev-qa-db-ja.com

2つのAndroidデバイス間のBluetoothデータ転送

私はフォローしています これAndroidガイド Bluetooth通信用

私が何をしたいかを正確に説明すると、2つのデバイスがペアになっている場合、2つの異なるアクティビティが各デバイス(サーバーとクライアント)で開き、サーバーアクティビティには異なるボタンがあり、クライアントアクティビティには単なるテキストビューがあります。サーバーデバイスのボタンを押してクライアントに表示できるようにしたいのですが。

2つのデバイス間の接続をなんとか確立できましたが、今はできなかったデータを送信したいと思います。

彼らはデータ転送のためにこのコードを与えます:

private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;

public ConnectedThread(BluetoothSocket socket) {
    mmSocket = socket;
    InputStream tmpIn = null;
    OutputStream tmpOut = null;

    // Get the input and output streams, using temp objects because
    // member streams are final
    try {
        tmpIn = socket.getInputStream();
        tmpOut = socket.getOutputStream();
    } catch (IOException e) { }

    mmInStream = tmpIn;
    mmOutStream = tmpOut;
}

public void run() {
    byte[] buffer = new byte[1024];  // 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);
            // Send the obtained bytes to the UI activity
            mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
                    .sendToTarget();
        } catch (IOException e) {
            break;
        }
    }
}

/* Call this from the main activity to send data to the remote device */
public void write(byte[] bytes) {
    try {
        mmOutStream.write(bytes);
    } catch (IOException e) { }
}

/* Call this from the main activity to shutdown the connection */
public void cancel() {
    try {
        mmSocket.close();
    } catch (IOException e) { }
}
}

しかし、この行はエラーを生成します

// Send the obtained bytes to the UI activity
            mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget();

ガイドでは説明されていません。 mHandlerが何であるか、または何をするのかわかりません。

エラーを除いて、私はこのコードをどこに置くべきか本当に理解していません。私が開くのはメインの2番目のアクティビティ(サーバーとクライアント)ですか。サーバーアクティビティの場合、ボタンごとに送信するバイトコードが異なるすべてのボタンのonClickメソッドに含める必要がありますか?そして、このコードでは、送信者と受信者をどのように区別するのでしょうか。

10
Simpsons

GoogleがSDKで提供している BluetoothChat の例を確認してください。 Bluetoothを介してテキストの基本的な送信を実装する方法を示します。

12
Joreyaesh

チュートリアルの例を試すこともできます ここ

1
addy123

mHandlerは、BluetoothHandle.Javaからアクティビティにメッセージを渡すために使用されます。これは、BluetoothHandlerによって返される画面上のメッセージを更新するのに役立ちます。

あなたはあなたの活動からmHandlerを作成し、このようにあなたのハンドラを呼び出さなければなりません-

mBluetoothHandler = new BluetoothHandler(this, mHandler);

そしてあなたのBluetoothHandler.Javaはこのようなコンストラクタを持っています-

public class BluetoothHandler { 

    public BluetoothHandler(Context context, Handler handler) {
            mAdapter = BluetoothAdapter.getDefaultAdapter();
            mState = STATE_NONE;
            mHandler = handler;
            mcontext = context;
   }

}

詳細については、AndroidサンプルプロジェクトBluetoothチャット)を参照してください。このリンクを使用することもできます: http://myandroidappdevelop.blogspot.in/2013/05/bluetooth-chat-example.html

0
Ankit

あなたが見たエラーについて教えてください。

AnkitとAddyからの情報によると、BlueToothChatは、参照するのに最適なコードです。 2 Androidデバイスにロードして、実験を行います。一方をサーバーとして、もう一方をクライアントとして使用して、それらの間でメッセージを交換します。このような実験は、コードを理解し、コーディングロジックを決定するのに役立ちます。

0
SunGa
// Enter code here

Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        byte[] writeBuf = (byte[]) msg.obj;
        int begin = (int)msg.arg1;
        int end = (int)msg.arg2;

        switch(msg.what) {
            case 1:
                String writeMessage = new String(writeBuf);
                writeMessage = writeMessage.substring(begin, end);
                break;
        }
    }
};
0
user3420105