2 Activities nutzen selbe Bluetoothinstanz

  • Antworten:18
Hans Maisser
  • Forum-Beiträge: 20

01.03.2012, 12:39:35 via Website

Hallo zusammen.

Auf Basis des Bluetoothchatsample würde ich gern weitere Activities den Bluetoothchat-Dienst nutzen lassen. Meine erste Activity enthält die Kommunikation mit der Klasse BluetoothChatService und stellt über diese eine Verbindung zu meinem externen Gerät her. Was genau müsste ich nun in meiner zweiten Activity veranlassen, damit ich auch diese mit der bereits bestehenden Verbindung nutzen kann?

Vielen Dank für sinnvolle Antworten!

Antworten
Hans Maisser
  • Forum-Beiträge: 20

01.03.2012, 12:53:19 via Website

reiti.net
warum willst du denn die bestehende Verbindung nutzen .. ? Kann deine Chatklasse mit sich überschneidenden Datenstreams auch umgehen?

Nun ich dachte entweder an eine Weiterleitung des OUTPUT von ActivityX jeweils über die erste Activity an den Service. Sollte das nicht sinnvoll sein, würde ich mit jeder Activity ( bei mir sind immer maximal 3 Activities gleichzeitig aktiv und die erste immer ) einen neuen "Kanal" erstellen, über den dann aktuell kommuniziert wird. Die Daten ( INPUTS wie OUTPUTS ) sind "kodierte" Commandstrings, die ich im Code weiter behandle.

Antworten
Hans Maisser
  • Forum-Beiträge: 20

01.03.2012, 13:04:55 via Website

um es etwas unkompliziert zu sagen - meine App soll innerhalb eine Verbindung aufbauen und halten. Egal von wo in meiner App soll diese Verbindung genutzt werden können.

reiti.net
Kann deine Chatklasse mit sich überschneidenden Datenstreams auch umgehen?

Es ist nicht meine Klasse sondern aus dem Beispiel Bluetoothchatservice und nein, das kann sie bisher nicht:(

— geändert am 01.03.2012, 13:07:17

Antworten
Hans Maisser
  • Forum-Beiträge: 20

01.03.2012, 15:50:53 via Website

ok - ich lese mich da mal rein. In meinem Buch steht davon nichts. Aber z.G. ja im Netz. Ich melde mich dann wieder ;)

danke erstmal!

Antworten
Hans Maisser
  • Forum-Beiträge: 20

01.03.2012, 16:12:41 via Website

Rafael K.
Oder eine eigenen Application Klasse.
Ist auch ein Singleton und du kannst über getApplicationContext() aus jeder Activity drauf.

Wenn ich das bisher richtig verstanden hab ( bin neu in Java und Android. Bisher habe ich in C sequenziell µC programmiert. ) lagere ich alle Funktionen wie BroadcastReceiver mBTReceiver = new BroadcastReceiver() {... u.s.w. aus meiner ersten Activity in eine extra Klasse aus, rufe diese dann einmal auf, lasse diese Klasse die Objekte wie den BluetoothAdapter erzeugen/verwalten, verwende diese Klasse dann als Singleton und rufe aus Activities heraus die z.B. sendMessage(String message)-Methode der Klasse auf?


Wie gesagt - ich bin neu und stehe vor einem Wald an Objekten. Auch wenn mir OOP nicht unbekannt ist.

Antworten
Hans Maisser
  • Forum-Beiträge: 20

01.03.2012, 16:33:07 via Website

Meine neue Klasse entwerfe ich so?

public final class BT_Communication
{

private static BT_Communication instance;

private BT_Communication() {
//Hier drinnen sind alle meine Routinen zur Kommunikation
}

public synchronized static BT_Communication getInstance()
{
if (instance == null)
{
instance = new BT_Communication();
}
return instance;
}
}


>_>

Antworten
Hans Maisser
  • Forum-Beiträge: 20

02.03.2012, 00:34:20 via Website

Hab mir jetzt bereits eine Klasse "BluetoothCommunication" gebastelt, die ich nun in einer Activity per getInstance(); aufrufen möchte. Leider bekomm ich im Mom nen Absturz von den Zeilen:

private BluetoothCommunication BTComm = null;
BTComm = BluetoothCommunication.getInstance();

in BluetoothCommunication.getInstance() erzeugt die Zeile

instance = new BluetoothCommunication();

einen ( im LogCat unendlich scheinenden roten ) FATAL EXCEPTION ERROR.

Die BluetoothCommunication ist aber syntaktisch korrekt und ich verwende die Instanz noch garnicht. Irgendwo hab ich da nen Denkfehler.

Ich würde gern die Klasse posten, nur scheint mir das etwas zulang und unleserlich hier:(

Antworten
Hans Maisser
  • Forum-Beiträge: 20

02.03.2012, 03:27:05 via Website

Jetzt funktioniert der Aufruf der einzelnen Instanz prima.

Zwei Sorgen zwicken mich nun noch.

Wie kann ich aus meiner Klasse eine Activity aufrufen, wenn meine Klasse garkeine "android.app.Activity" eingebunden hat und somit auch nicht deren Funktionen?

Und zweitens - ist es korrekt, das ich jeweils den context der aufrufenden Activity in meine Klasse durchreiche anstatt this zu verwenden? this funktioniert hier leider nicht:(

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

02.03.2012, 08:33:08 via Website

Deswegen ist es evtl. besser dafür eine eigene Application Implementierung zu nehmen.
Da hast du zumindest integrierten Zugriff auf den Android Unterbau.

http://www.devahead.com/blog/2011/06/extending-the-android-application-class-and-dealing-with-singleton/

Antworten
Hans Maisser
  • Forum-Beiträge: 20

02.03.2012, 10:15:54 via Website

[quote=Rafael K.]Deswegen ist es evtl. besser dafür eine eigene Application Implementierung zu nehmen.
Da hast du zumindest integrierten Zugriff auf den Android Unterbau.

Das habe ich bereits. Mir ist nur noch nicht ganz klar was Application alles beinhaltet. In meiner App:

package app.Bluemax;

import android.app.Application;

public final class BluetoothCommunication extends Application {...

nun muss ich einerseits eine Activity daraus aufrufen ( dazu brauch ich natürlich Context und so Sachen wie startActivityForResult) und andererseits muss diese Klasse eigene Objekte wie den Broadcastreceiver oder den Bluetoothadapter erzeugen. Und beides funktioniert noch nicht.

Ich möchte lediglich eine Referenz per

BTComm = BluetoothCommunication.getInstance(this);

in meiner Activity erzeugen ( funzt ja auch ), über die ich die ganze Communikation laufen lasse. Die o.g. Aufgaben soll die Klasse selbst regeln.

— geändert am 02.03.2012, 10:18:16

Antworten
Hans Maisser
  • Forum-Beiträge: 20

02.03.2012, 13:24:58 via Website

So - ich war jetzt im Thalia und hab mir drei Bücher über Android Entwicklung gekauft. Bin sehr gespannt, auch wenn in keinem so Sachen wie Singleton behandelt werden. Aber es kann nicht so weiter gehen, dass ich nur die Hälfte verstehe.

Welche Bücher könnt ihr empfehlen, wo Multitask, Singleton, DDMS, Traceview u.u. mal Fundamental beschrieben sind?

Antworten
Sven S.
  • Forum-Beiträge: 2

08.05.2012, 18:00:22 via Website

Hallo Hans,

bin gerade über diesen Thread
gestolpert.

Sitze gerade an dem selben Problem und Versuche das BluetoothChat Sample so zu ändern, dass eine neue Activitie aufgerufen werden kann ohne dass die Verbindung dsconnected. Hast du bereits eine Lösung gefunden? Bin leider auch noch ziemlicher Anfänger dies bezügich und weiss nicht wo ich anfangen soll...

Vielen Dank für deine Hilfe.

Schönen Gruß
Sven

Antworten
Hans Maisser
  • Forum-Beiträge: 20

08.05.2012, 22:54:29 via Website

hab im Mom leider wenig Zeit. Aber ich schreibe dir baldmöglichst meine Lösung.

lG

Antworten
Sven S.
  • Forum-Beiträge: 2

09.05.2012, 07:34:43 via Website

Habe jetzt einfach das Layout geändert, ohne eine neue Activitie aufzurufen, sicher nicht optimal, aber es funkioniert. Über einen besseren Lösungsansatz würde ich mich dennoch freuen.Vielen Dank dafür.

— geändert am 09.05.2012, 07:37:40

Antworten
Hans Maisser
  • Forum-Beiträge: 20

21.05.2012, 10:08:00 via Website

Hallo.

Leider komme ich heute erst zum Schreiben.

Ich habe eine extra Klasse angelegt ( ohne Activity ) in der alle Notwendigkeiten zur Kommunikation mit Bluetooth enthalten sind. Dann erstelle ich ein Objekt dieser Klasse in meiner ersten Activity und reiche das Objekt jeweils weiter an die anderen Activities. Weiterhin achte ich darauf, dass immer nur zwei Activities aktiv sind und natürlich prüfe ich das Object dann auf Inhalt. Ist es ungültig, wird es automatisch neu erzeugt.

Solltest du genauere Infos benötigen...gern;)

Antworten