Zwei Buttons auf einer Activity

  • Antworten:4
luapies
  • Forum-Beiträge: 6

12.05.2020, 13:33:11 via Website

Hallo zusammen,
ich habe eine Frage und das Gefühl, dass ich auf dem Schlauch stehe. Ich habe eine Seite erstellt. Hier soll man sich erst mit dem "Verbinden"- Button mit einem Bluetooth-Modul verbinden. Danach mit "Starten" auf eine andere Activity springen. Allerdings nimmt die Seite immer nur einen "Klick" an. Wenn ich also einmal "Verbinden" anklicke, tut sich nichts mehr, wenn ich auf "Starten" klicke. Auch das optische Feedback bei dem "Verbinden"-Button bleibt danach aus. Ich habe es auch schonmal mit switch-case probiert. Bin mir aber nicht sicher, ob man diese Methode hier verwenden kann. Hat aber auch nicht funktioniert.
Ich würde die Seite sich ja automatisch verbinden lassen (also nur mit einem "Starten"-Button") und dann nur den "Starten"-Button ganz normal über onClickListener ansteuern, allerdings verschwindet mein Seitenlayout, wenn ich den Code für das Verbinden in public Void onCreate einsetze, was mir auch ein Rätsel ist.
Hänge euch mal Screenshots an.imageimage

Freue mich auf jede Antwort und vielen Dank im Voraus

Liebe Grüße
David

— geändert am 12.05.2020, 13:34:26

Kommentieren
luapies
  • Forum-Beiträge: 6

12.05.2020, 13:36:26 via Website

Okay die Screenshots erkennt man nicht:?
Hier der Code

package com.arduinobt_controlcompany.arduinobluetooth_control;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

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

public class MainActivity extends AppCompatActivity{

Button btnVerbinden;
Button btnStarten;


static final UUID mUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnVerbinden = (Button) findViewById(R.id.btnVerbinden);
    btnStarten = (Button) findViewById(R.id.btnStarten);
    btnStarten.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            launchActivity();

        }
    });

    btnVerbinden.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter(); // Modul aus dem Smartphone soll verwendet werden
            System.out.println(btAdapter.getBondedDevices());                  //Ausgabe aller gekoppelten Geräte -> Identifikation des HC-05
            //[D8:E0:E1:AD:1B:A4, C4:30:18:6E:5A:B2, F4:4E:FD:CB:2A:A1, B8:D5:0B:CF:54:34, E9:08:EF:0C:08:B3, 98:D3:31:F7:3D:96, C0:28:8D:C5:B2:1B, 00:12:6F:AE:38:46, 20:9B:A5:6F:41:A2, FC:A8:9A:1A:B2:F4, 2A:19:11:26:01:25, 88:C6:26:F0:F1:1A, FC:A8:9A:E1:98:10, FC:62:B9:2A:E5:3E, B8:69:C2:E9:02:5B, 7C:96:D2:48:9D:BF, FC:A8:9A:94:95:02, 30:23:B5:2F:C1:7B, FC:58:FA:12:26:6C, FC:A8:9A:D3:41:9C, 80:82:23:23:1C:06, 30:23:B6:C5:0E:DE, 08:DF:1F:B6:0D:72, A4:84:31:2F:90:F0, 4C:87:5D:FD:53:20, B8:69:C2:4F:A2:93, 48:F0:7B:C1:9A:56]
            //[D8:E0:E1:AD:1B:A4, C4:30:18:6E:5A:B2, F4:4E:FD:CB:2A:A1, B8:D5:0B:CF:54:34, E9:08:EF:0C:08:B3, hier ist das HC05, C0:28:8D:C5:B2:1B, 00:12:6F:AE:38:46, 20:9B:A5:6F:41:A2, FC:A8:9A:1A:B2:F4, 2A:19:11:26:01:25, 88:C6:26:F0:F1:1A, FC:A8:9A:E1:98:10, FC:62:B9:2A:E5:3E, B8:69:C2:E9:02:5B, 7C:96:D2:48:9D:BF, FC:A8:9A:94:95:02, 30:23:B5:2F:C1:7B, FC:58:FA:12:26:6C, FC:A8:9A:D3:41:9C, 80:82:23:23:1C:06, 30:23:B6:C5:0E:DE, 08:DF:1F:B6:0D:72, A4:84:31:2F:90:F0, 4C:87:5D:FD:53:20, B8:69:C2:4F:A2:93, 48:F0:7B:C1:9A:56]

//[ //Adresse des HC-05 = 98:D3:31:F7:3D:96

            BluetoothDevice hc05 = btAdapter.getRemoteDevice("98:D3:31:F7:3D:96");
            System.out.println(hc05.getName());     //Ausgabe des Namen in der Konsole zur Kontrolle

            BluetoothSocket btSocket = null;      //Socket zur Kommunikation zwischen Handy und HC-05
            try {
                btSocket = hc05.createRfcommSocketToServiceRecord(mUUID);
                System.out.println(btSocket);           //Kontrolle, ob Socket erstellt wurde    /Verhältnis: HC-05: Server , Handy: Client
                btSocket.connect();                     // Verbinden mit HC-05
                System.out.println(btSocket.isConnected());
            } catch (IOException e) {
                e.printStackTrace();
            }

            InputStream inputStream = null;
            try {
                inputStream = btSocket.getInputStream();
                inputStream.skip(inputStream.available());

                for (int i = 0; i < 26; i++) {

                    byte b = (byte) inputStream.read();
                    System.out.println((char) b);
                }

            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                btSocket.close();       //Methode, um Verbindung zu trennen
                System.out.println(btSocket.isConnected());
            } catch (IOException e) {
                e.printStackTrace();

            }
        }});}

private void launchActivity() {
    Intent intent = new Intent(this, ControllingActivity.class);        //Wechsel von.. nach..
    startActivity(intent);

}


}
Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.294

12.05.2020, 15:13:39 via Website

Du musst die Bluetooth Kommunikation auslagern in einen AsyncTask oder Thread.
Diese blokiert den UI Thread und daher sind keine Interaktionen mehr möglich

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
luapies
Kommentieren
luapies
  • Forum-Beiträge: 6

12.05.2020, 15:36:16 via Website

Ah okay, danke.
Und wie genau mache ich das?(thinking) Wäre es auch möglich den Befehl zum Verbinden und zum Wechseln der Seite in einem Button zu vereinen? Oder werden auch alle weiteren Activitys blockiert?

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.294

12.05.2020, 15:42:30 via Website

Naja, du musst das schon trenne.
Kommunikation und Verbinung in extra Klassen und teilweise Async.
Am besten mit Threads und Singleton.
Wie genau informierst du dich mal z.b. hier https://developer.android.com/reference/android/os/AsyncTask

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren