有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

LeJOS EV3和Android之间的java蓝牙连接

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

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

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

我希望你能帮助我
我来自德国,所以不要怀疑我漂亮的写作技巧

这是我的代码:
应用程序:

公共类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) 个答案

  1. # 1 楼答案

    我有答案

    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);
    
            }
        }
    }