LeJOS EV3和Android之间的蓝牙连接

时间:2017-04-14 10:19:53

标签: java android sockets bluetooth lego

我无法使用应用程序通过蓝牙将智能手机连接到我的EV3。

我的情况:
我正在开发一个应用程序,将简单的字符串发送到使用leJOS 0.9.1-aplu11运行的EV3。
我的问题是,我对蓝牙并不熟悉,所以我的应用程序或我的接收器软件也不能正常工作。

我的目标:
我的目标是在EV3上创建一个监听器,该监听器从应用程序中持久监听字符串,以及在按下按钮时发送字符串的应用程序。

我希望你能帮助我 我来自德国,所以不要为我的美丽写作技巧而烦恼!

这是我的代码:
App:

公共类MainActivity扩展了AppCompatActivity {

private final static String TAG = "MainActivity";
private BluetoothAdapter mBluetoothAdapter;
private static BluetoothDevice mDevice;
private Button mSendBN;

private final static String MY_UUID = "00001101-0000-1000-8000-00805f9b34fb";
private static BluetoothSocket mSocket = null;
private static String mMessage = "Stop";
private static PrintStream sender;

private void findBrick() {
    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter
            .getBondedDevices();
    for (BluetoothDevice device : pairedDevices) {
        if (device.getName().equals("EV3"))
            this.mDevice = device;
    }
}

private void initBluetooth() {
    Log.d(TAG, "Checking Bluetooth...");
    if (mBluetoothAdapter == null) {
        Log.d(TAG, "Device does not support Bluetooth");
        mSendBN.setClickable(false);
    } else {
        Log.d(TAG, "Bluetooth supported");
    }
    if (!mBluetoothAdapter.isEnabled()) {
        mSendBN.setClickable(false);
        Log.d(TAG, "Bluetooth not enabled");
    } else {
        Log.d(TAG, "Bluetooth enabled");
    }
}

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Toast.makeText(this, "SpeechRecognizer gestartet", Toast.LENGTH_SHORT).show();
    setContentView(R.layout.activity_main);

    mSendBN = (Button) findViewById(R.id.button);
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

    initBluetooth();
    findBrick();

    if (mDevice == null) {
        mSendBN.setClickable(false);
        Toast.makeText(this, "No Devices found or BT disabled", Toast.LENGTH_SHORT).show();
        Log.d("onC", "Connected to " + mDevice);
    }

    try {
        createSocket();
    } catch (IOException e) {
        e.printStackTrace();
    }
    startService();
}

private void startService() {
    if (PermissionHandler.checkPermission(this, PermissionHandler.RECORD_AUDIO)) {
        Intent i = new Intent(this, BackgroundRecognizerService.class);
        startService(i);
    }
}

public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == PermissionHandler.RECORD_AUDIO && grantResults.length > 0) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            startService();
        }
    }
}

public static void onSend(View view) throws IOException {
    try {
        OutputStream os = mSocket.getOutputStream();
        sender = new PrintStream(os);
        Log.d("onSend", "Message = " +  mMessage);
        sender.println(mMessage);
        sender.flush();
        Log.d("onSend", "Message sent");
        mSocket.close();
        Log.d("onSend", "Socket closed");
    } catch (IllegalStateException | NullPointerException e) {
        e.printStackTrace();
    }

}

public void createSocket() throws IOException {
    try {
        UUID uuid = UUID.fromString(MY_UUID);
        mSocket = mDevice.createRfcommSocketToServiceRecord(uuid);
    } catch (IOException e) {
        e.printStackTrace();
    }

    Log.d("createSocket", "Adapter");

    BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
    mSocket.connect();
    OutputStream os = mSocket.getOutputStream();
    sender = new PrintStream(os);

    Log.d("createSocket", "Fertig, " + "Socket: " + mSocket + " Sender: " + sender + " OutputStream: " + os + " mDevice: " + mDevice.getName());
}

protected void onDestroy() {
    super.onDestroy();
    Log.d("onDestroy", "App beendet");
    try {
        mSocket.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    Log.d("onDestroy", "App vollständig beendet");
}

}

EV3:

public class BTJ {
public static void main(String[] args) {

    BTConnector connector = new BTConnector();

    System.out.println("0. Auf Signal warten");

    NXTConnection conn = connector.waitForConnection(0, NXTConnection.RAW);

    InputStream is = conn.openInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is));

    String message = "";

    while (true){

        System.out.println("1. Schleife gestartet");
        message = "";

        try {
            message = br.readLine();
            System.out.println("2. Message: " + message);
        } catch (IOException e) {
            e.printStackTrace(System.out);
        }
    }
}

}

1 个答案:

答案 0 :(得分:0)

我有答案..!

public class BTJ {

    public static void main(String[] args) {
        BTConnector connector = new BTConnector();

        System.out.println("0. Auf Signal warten");

        NXTConnection conn = connector.waitForConnection(0, NXTConnection.RAW);

        InputStream is = conn.openInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is), 1);

        String message = "";

        while (true){

            System.out.println("1. Schleife gestartet");
            message = "";

            try {
                message = br.readLine();
                System.out.println("2. Message: " + message);
            } catch (IOException e) {
                e.printStackTrace(System.out);

        }
    }
}