alle 100 ms Daten über Bluetooth senden

H

hörnerwhisky

Neues Mitglied
Threadstarter
Hallo Zusammen,

ich möchte auf Basis eines bestehenden Projektes ein Paket von 13 bytes über Bluetooth senden. Das Senden per klick auf einen Button funktioniert bereits. Wie kann ich dieses Paket nun automatisch alle 100ms senden? Ich habe mich etwas eingelesen. Das geht wohl über einen Handler. Ich habe auch ein Beispiel aus dem Internet in meinen Code eingebaut:

Code:
    Handler mHandler;
    public void useHandler() {
        mHandler = new Handler();
        mHandler.postDelayed(mRunnable, 100);
    }

    private Runnable mRunnable = new Runnable() {

        @Override
        public void run() {
            Log.e("Handlers", "Calls");
            try {
                sendDataToController(bytes_to_send);
            } catch (IOException e) {
                e.printStackTrace();
            }
            mHandler.postDelayed(mRunnable, 100);
        }
    };
Das compiliert auch ohne Fehler, ich fürchte aber ich habe den Code an der falschen Stelle eingebaut... Es sendet nix. :-(
Kann mir jemand auf die Sprünge helfen, wie der Handler eingebaut werden muß, damit er einfach direkt mit dem Start der App anfängt zu senden?!

Gruß
hörnerwhisky
 
swa00

swa00

Moderator
Teammitglied
Hallo und willkommen im Forum,

es gibt mehrere Möglichkeiten , hier mal eine

Code:
  private class SendThread extends Thread
    {

        @Override
        public void run()
        {
            super.run();
            while(!isInterrupted())
            {
                SystemClock.sleep(100);
                try
                {
                  // send Data
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                    return;
                }
            }
        }
    }
Aufruf :

Code:
SendThread RT = new SendThread();
RT.start();
P.S 100ms Loop ist allerdings schon heftig ,
 
Zuletzt bearbeitet:
H

hörnerwhisky

Neues Mitglied
Threadstarter
Erst mal danke für die schnelle Antwort. Und wo muß das hin im code?
Wenn ich das einfach so hinten anhänge sagt mir Android Studio "private inner class 'SendThread' is never used"
Gruß
hörnerwhisky
 
swa00

swa00

Moderator
Teammitglied
Das ist eine Klasse , - dort wo sie für dich passend ist , das vermag ich nicht zu beantworten,
denn ich kenne dein Projekt nicht.


Ansonsten solltest du dich vorher ein wenig mehr mit dem Grundlagen auseinander setzen (OOP)
 
H

hörnerwhisky

Neues Mitglied
Threadstarter
Ich geb ja zu, daß ich blutiger Anfänger in Android bin. Ich stöpsel mir immer Code Schnipsel zusammen, meist funktioniert das, manchmal muß ich fragen...
Wo muß jetzt dieser Start des Threads hingeschrieben werden?!
Code:
        SendThread ST = new SendThread();
        ST.start();
Gruß
hörnerwhisky
 
swa00

swa00

Moderator
Teammitglied
Nimm die Klasse von oben und kopier sie Dir in die MainActivity.
Und im OnCreate startest du sie wie beschrieben .

Wichtiger Hinweis :
a) 100ms sind zu schnell für eine UI.
b) Android wird/kann dir deinen Thread nach belieben beenden - die Eigenschaft von Android

Ich stöpsel mir immer Code Schnipsel zusammen
P.S also mit dem "stöpseln" wird dir nichts bringen - oder sprichst du eine Fremdprache, indem du dir aus dem Netz Sätze kopierst ? :)
Hoffst du dann immer noch , dass man dich verstanden hat ? :)
 
H

hörnerwhisky

Neues Mitglied
Threadstarter
Vielen Dank für die Hilfe! Beim on create hat es nicht funktioniert, da zu dem Zeitpunkt die BT-Verbindung noch nicht aufgebaut ist, aber bei onStart, nach dem Herstellen der BT-Verbindung funktioniert es :)

Code:
    public void onStart() {
        super.onStart();

        //if BT is not on, request that it be enabled.
        //connection will then be made during onActivityResult
        if (mBluetoothAdapter != null) {
            if (!mBluetoothAdapter.isEnabled()) {
                Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
            }
            if (socket == null)
                login();
        }
        SendThread ST = new SendThread();
        ST.start();

    }
Gruß
hochsitzcola
 
Oben Unten