Porblem с Android Bluetooth-связью - PullRequest
       7

Porblem с Android Bluetooth-связью

0 голосов
/ 23 апреля 2020

Мне не удалось отправить данные типа String с устройства android на другое через Bluetooth. В классе Entrainement.java я хочу отправлять данные, нажимая на кнопки. Я пытался сделать это, но всегда есть проблема и приложение закрывается, к сожалению. Как я могу решить эту проблему?

Entrainement.java

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.os.Handler;
import android.os.Message;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class entrainement extends AppCompatActivity {
  Button btn6,btn7,btn8,btn16,btn9,btn5;
  EditText txt;
  TextView logview;
  private BtInterface bt = null;

  private long lastTime = 0;

  final Handler handler = new Handler() {
    public void handleMessage(Message msg) {
      String data = msg.getData().getString("receivedData");

      long t = System.currentTimeMillis();
      if(t-lastTime > 100) {// Pour éviter que les messages soit coupés
        logview.append("\n");
        lastTime = System.currentTimeMillis();
      }
      logview.append(data);
    }
  };

  final Handler handlerStatus = new Handler() {
    public void handleMessage(Message msg) {
      int co = msg.arg1;
      if(co == 1) {
        logview.append("Connected\n");
      } else if(co == 2) {
        logview.append("Disconnected\n");
      }
    }
  };
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.entrainement);
    btn6 = findViewById(R.id.button6);
    btn7 = findViewById(R.id.button7);
    btn8 = findViewById(R.id.button8);
    btn16 = findViewById(R.id.button16);
    btn9 = findViewById(R.id.button9);
    btn5 = findViewById(R.id.button5);
    txt = findViewById(R.id.editText2);
    logview = findViewById(R.id.textView14);
    bt = new BtInterface(handlerStatus, handler);


      btn6.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            bt.sendData("R");
        }
      });

    btn16.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
          bt.sendData("L");
      }
    });

    btn7.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
          bt.sendData("X");
      }
    });

    btn8.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
          bt.sendData("Y");
      }
    });

    btn5.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
          bt.connect();
      }
    });

    btn9.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
          bt.sendData(txt.getText().toString());
      }
    });
  }
}

BtInterface. java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

public class BtInterface {

  private BluetoothDevice device = null;
  private BluetoothSocket socket = null;
  private InputStream receiveStream = null;
  private OutputStream sendStream = null;

  private ReceiverThread receiverThread;

  Handler handler;

  public BtInterface(Handler hstatus, Handler h) {
    Set<BluetoothDevice> setpairedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
    BluetoothDevice[] pairedDevices = (BluetoothDevice[]) setpairedDevices.toArray(new BluetoothDevice[setpairedDevices.size()]);

    for(int i=0;i<pairedDevices.length;i++) {
      if(pairedDevices[i].getName().contains("ModuleBluetooth")) {
        device = pairedDevices[i];
        try {
          socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
          receiveStream = socket.getInputStream();
          sendStream = socket.getOutputStream();
        } catch (IOException e) {
          e.printStackTrace();
        }
        break;
      }
    }

    handler = hstatus;

    receiverThread = new ReceiverThread(h);
  }

  public void sendData(String data) {
    sendData(data, false);
  }

  public void sendData(String data, boolean deleteScheduledData) {
    try {
      sendStream.write(data.getBytes());
      sendStream.flush();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  public void connect() {
    new Thread() {
      @Override public void run() {
        try {
          socket.connect();

          Message msg = handler.obtainMessage();
          msg.arg1 = 1;
          handler.sendMessage(msg);

          receiverThread.start();

        } catch (IOException e) {
          Log.v("N", "Connection Failed : "+e.getMessage());
          e.printStackTrace();
        }
      }
    }.start();
  }

  public void close() {
    try {
      socket.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  public BluetoothDevice getDevice() {
    return device;
  }

  private class ReceiverThread extends Thread {
    Handler handler;

    ReceiverThread(Handler h) {
      handler = h;
    }

    @Override public void run() {
      while(true) {
        try {
          if(receiveStream.available() > 0) {

            byte buffer[] = new byte[100];
            int k = receiveStream.read(buffer, 0, 100);

            if(k > 0) {
              byte rawdata[] = new byte[k];
              for(int i=0;i<k;i++)
                rawdata[i] = buffer[i];

              String data = new String(rawdata);

              Message msg = handler.obtainMessage();
              Bundle b = new Bundle();
              b.putString("receivedData", data);
              msg.setData(b);
              handler.sendMessage(msg);
            }
          }
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...