Christoph R.
Rang: Android Prof
Beiträge: 602
Eintrittsdatum: 21.10.2009
Modell: HTC Desire HD
Firmware: 2.2
Mod: -
Kernel: 2.6.32.21
Build: 1.32.405.6
Provider: E-Plus
|
BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 14:47:01
Ich spiele wieder mal ein bischen mit der Android-Programmierung herum, und will dabei eingehende SMS verarbeiten. Dazu soll ein BroadcastReceiver eine neue Activity starten, und dieser das Bundle mitübergeben, damit die gestartete Activity die SMS-Daten auswerten kann. 1public class SMSReceiver extends BroadcastReceiver { 2 private static final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 3 4 @Override 5 public void onReceive(Context context, Intent intent){ 6 if(intent.getAction().equals(ACTION_SMS_RECEIVED)){ 7 Intent activityIntent = new Intent(); 8 activityIntent.setClassName("net.krisdoff.SMSReceiver", "SMSPopUpActivity"); 9 activityIntent.putExtras(intent.getExtras()); 10 activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 11 context.startActivity(activityIntent); 12 } 13 } 14}
Das einzige was dabei rauskommt ist allerdings ein "unerwartet beendet". Die SMSPopUpActivity ist bisher nur ein leerer Bildschirm und tut garnichts. Irgendwo im Intent muss also was liegen - kann mir jemand auf die Sprünge helfen?
|
Mac Systems
Rang: Android SilverSenior
Beiträge: 966
Eintrittsdatum: 21.06.2009
Modell: Galaxy Nexus
Firmware: 4.0.2
Mod: -
Kernel: -
Build: -
Provider: -
|
RE: BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 15:04:27
Ich finde es immer unschön mit Strings zu arbeiten wenn man stattdessen Konstanten nutzen kann, beim refactoren hat man auch keine sorgen damit! Daher folgende Idee: 1intent.setClass(context,SMSPopUpActivity.class);
hth, Mac
-----
Kite-fast.de - Chillen - PKRA 2010 Java MP3 Player - Wind Mate APP
|
Christoph R.
Rang: Android Prof
Beiträge: 602
Eintrittsdatum: 21.10.2009
Modell: HTC Desire HD
Firmware: 2.2
Mod: -
Kernel: 2.6.32.21
Build: 1.32.405.6
Provider: E-Plus
|
RE: BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 16:06:01
Ich war mir sicher, dass ich das auch probiert hatte. Aber das tut's.  Intent weitergeben und in der Activity auswerten klappt auch, alles wie geplant. Danke
|
Christoph R.
Rang: Android Prof
Beiträge: 602
Eintrittsdatum: 21.10.2009
Modell: HTC Desire HD
Firmware: 2.2
Mod: -
Kernel: 2.6.32.21
Build: 1.32.405.6
Provider: E-Plus
|
RE: BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 17:15:02
Na immerhin, wird doch 
|
Jörg V.
Status: Administrator
Rang: Android Gottheit
Beiträge: 4.914
Eintrittsdatum: 08.06.2009
Modell: Samsung Galaxy Note (N7000)
Firmware: 2.3.6
Mod: -
Kernel: 2.6.35.7-N7000XXKKA-CL726566
Build: Gingerbread.XXKKA
Provider: T-Mobile AT
|
RE: BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 18:14:10
Na bitte, wird doch. Ich nehme an, dass Du den Receiver in einem Hintergrund Service laufen hast oder?
-----
lg Voss - Ach ja und noch was, unsere AndroidPIT-Regeln ლ(╹◡╹ლ)
|
Christoph R.
Rang: Android Prof
Beiträge: 602
Eintrittsdatum: 21.10.2009
Modell: HTC Desire HD
Firmware: 2.2
Mod: -
Kernel: 2.6.32.21
Build: 1.32.405.6
Provider: E-Plus
|
RE: BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 18:28:23
Jörg V. Na bitte, wird doch.
Ich nehme an, dass Du den Receiver in einem Hintergrund Service laufen hast oder? Nein. Wäre das die elegantere Lösung bzw. wo wären die Vorteile? Wolte eigentlich einen eigenen Service vermeiden, und soweit wie möglich auf System-Mittel zurückgreifen, daher rennt momentan der Code, wie er oben angegeben ist. Momentan muss ich erstmal herausfinden, ob nicht ein Dialog klüger wäre als eine Activity. Das Activity-Dialog-Theme ist nicht so das Wahre, die Dialoge bieten da schon eher das, was ich suche (AlertDialog)...
|
Jörg V.
Status: Administrator
Rang: Android Gottheit
Beiträge: 4.914
Eintrittsdatum: 08.06.2009
Modell: Samsung Galaxy Note (N7000)
Firmware: 2.3.6
Mod: -
Kernel: 2.6.35.7-N7000XXKKA-CL726566
Build: Gingerbread.XXKKA
Provider: T-Mobile AT
|
RE: BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 18:54:50
Wird dann Deine Activity nicht irgendwann "inresponsive" wenn sie nicht als Hintergrund-Service läuft? Wie hast Du das denn gelöst? Im Normalfall geht die Activity ja, wenn sie nicht mehr visible ist in den onPause und weiter in den onStop Handler, womit sie sofort ein Kandidat für den Process Kill wird.
-----
lg Voss - Ach ja und noch was, unsere AndroidPIT-Regeln ლ(╹◡╹ლ)
|
Jack-In-Da-Box
Status: Administrator
Rang: Android GoldSenior
Beiträge: 1.400
Eintrittsdatum: 22.09.2009
Modell: HTC Sensation
Firmware: 2.3.4
Mod: -
Kernel: -
Build: -
Provider: T-Mobile D
|
RE: BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 19:27:53
— geändert am 15.05.2010 19:28:35
eigentlich sollte das ohne service perfekt funzen... da im manifest der receiver via "action" definiert wird, wird android (bei einer eingegangenen sms) eine auswahlbox anzeigen, in der man die verarbeitende app angeben kann. darin sollte (neben der standart-sms-app) auch die eigene app auftauchen.
-----
AndroidPIT-Regeln || AndroidPIT-FanShop || AndroidPIT-UserMap
|
Christoph R.
Rang: Android Prof
Beiträge: 602
Eintrittsdatum: 21.10.2009
Modell: HTC Desire HD
Firmware: 2.2
Mod: -
Kernel: 2.6.32.21
Build: 1.32.405.6
Provider: E-Plus
|
RE: BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 19:29:01
Jörg V. Wird dann Deine Activity nicht irgendwann "inresponsive" wenn sie nicht als Hintergrund-Service läuft?
Wie hast Du das denn gelöst? Im Normalfall geht die Activity ja, wenn sie nicht mehr visible ist in den onPause und weiter in den onStop Handler, womit sie sofort ein Kandidat für den Process Kill wird. Die Activity ist ja garnicht der eigentliche Teil der App. Der Receiver ist quasi Haupt-"Activity", der im System registriert wird. Wird ein Broadcast geschmissen, wird er angesprochen, und löst die Activity aus. (Daher auch kein Icon im Menü, kein Öffnen der App beim Installieren) So ist zumindest mein Verständnis von der Sache
|
Jack-In-Da-Box
Status: Administrator
Rang: Android GoldSenior
Beiträge: 1.400
Eintrittsdatum: 22.09.2009
Modell: HTC Sensation
Firmware: 2.3.4
Mod: -
Kernel: -
Build: -
Provider: T-Mobile D
|
RE: BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 19:31:16
Christoph R. So ist zumindest mein Verständnis von der Sache  damit liegst du auch richtig
-----
AndroidPIT-Regeln || AndroidPIT-FanShop || AndroidPIT-UserMap
|
Jörg V.
Status: Administrator
Rang: Android Gottheit
Beiträge: 4.914
Eintrittsdatum: 08.06.2009
Modell: Samsung Galaxy Note (N7000)
Firmware: 2.3.6
Mod: -
Kernel: 2.6.35.7-N7000XXKKA-CL726566
Build: Gingerbread.XXKKA
Provider: T-Mobile AT
|
RE: BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 19:42:14
Nee klar ... Die Info hatte mir gefehlt .. mit dem registrieren des Receivers im Manifest.. Dann ist alles klar und es braucht natürlich keinen Hintergrundservice. Habt Ihr zufällig Erfahrungswerte wie sich das mit dieser Methode bei zeitkritischen Aktionen verhält wenn die App quasi erst geladen werden muss?
-----
lg Voss - Ach ja und noch was, unsere AndroidPIT-Regeln ლ(╹◡╹ლ)
|
Jack-In-Da-Box
Status: Administrator
Rang: Android GoldSenior
Beiträge: 1.400
Eintrittsdatum: 22.09.2009
Modell: HTC Sensation
Firmware: 2.3.4
Mod: -
Kernel: -
Build: -
Provider: T-Mobile D
|
RE: BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 19:44:48
Jörg V. Habt Ihr zufällig Erfahrungswerte wie sich das mit dieser Methode bei zeitkritischen Aktionen verhält wenn die App quasi erst geladen werden muss? definiere zeitkritische aktionen... die sms wird in jedem fall im system gespeichert... dann wird die entsprechende app (in aller ruhe) geladen...
-----
AndroidPIT-Regeln || AndroidPIT-FanShop || AndroidPIT-UserMap
|
Christoph R.
Rang: Android Prof
Beiträge: 602
Eintrittsdatum: 21.10.2009
Modell: HTC Desire HD
Firmware: 2.2
Mod: -
Kernel: 2.6.32.21
Build: 1.32.405.6
Provider: E-Plus
|
RE: BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 19:51:16
In welchem Fall müsste die App denn unmittelbar "da" sein? Selbst eine Verzögerung von 1 Sek. ist beim Empfang von SMS ja nicht tragisch. Oder hast du einen anderen Fall im Auge? Wenn ich dich richtig verstehe, hattest du einen Receiver im Hinterkopf, der während dem Laufen der App auf Intens achtet, richtig? z.B. Registrieren eines Anrufs, der die App unterbrechen würde? (Nur damit ich ein Verständnis davon bekomme, welche Fälle es noch alles gibt - bin schließlich Anfänger  )
|
Jörg V.
Status: Administrator
Rang: Android Gottheit
Beiträge: 4.914
Eintrittsdatum: 08.06.2009
Modell: Samsung Galaxy Note (N7000)
Firmware: 2.3.6
Mod: -
Kernel: 2.6.35.7-N7000XXKKA-CL726566
Build: Gingerbread.XXKKA
Provider: T-Mobile AT
|
RE: BroadcastReceiver soll Activity starten
verfasst am 15.05.2010 22:57:19
Ich frage deshalb so speziell weil ich schon mal festgestellt habe, dass es wenn man eingehende Telefonanrufe abfängt um dann irgendwelche Dinge zu tun die noch passieren sollten bevor die eigentliche Telefonapp zündet, sehr wohl darauf ankommt das der Code flott abgearbeitet wird, weil es sonst nicht funktioniert. Das war der Grund für die Frage. Genau gesagt gehts darum, wenn ein Anruf mit unterdrückter Nummer hereinkommt, das Klingeln und vibrieren zu unterdrücken. Das ist Zeitkritisch
-----
lg Voss - Ach ja und noch was, unsere AndroidPIT-Regeln ლ(╹◡╹ლ)
|
Christoph R.
Rang: Android Prof
Beiträge: 602
Eintrittsdatum: 21.10.2009
Modell: HTC Desire HD
Firmware: 2.2
Mod: -
Kernel: 2.6.32.21
Build: 1.32.405.6
Provider: E-Plus
|
RE: BroadcastReceiver soll Activity starten
verfasst am 16.05.2010 04:19:57
Das ist wahr - da muss der Code flott abgearbeitet sein. Hast du das vor? Das Ergebnis würde mich interessieren ... Mein Stand - ein bischen näher an dem, was es werden soll:
|
Christoph R.
Rang: Android Prof
Beiträge: 602
Eintrittsdatum: 21.10.2009
Modell: HTC Desire HD
Firmware: 2.2
Mod: -
Kernel: 2.6.32.21
Build: 1.32.405.6
Provider: E-Plus
|
RE: BroadcastReceiver soll Activity starten
verfasst am 16.05.2010 15:39:01
So. Stand wie oben im Screenshot zu sehen. Angenommen ich will im Title des AlertDialogs einen QuickContactBadge einbauen - verwende ich dazu AlertDialog.Builder.setCustomTitle(View) und definiere in der zu übergebenen View vorher mein Layout/Inhalt? Woodway oder der richtige Weg?
|