Intent dynamisch erstellen

  • Antworten:18
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 282

22.08.2014, 15:27:16 via Website

Hallo Leute :)

Ich will aus einem String (dieser den Klassennamen enthält) ein Intent-Objekt erzeugen.

Wie ist das möglich?

LG Jakob

Antworten
  • Forum-Beiträge: 11.135

22.08.2014, 16:58:35 via App

Ja das geht. Schau dir mal Class.getByName oder so ähnkich an.
Wenns falsch war poste ich dir heute abend den entsprechenden Code.

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

Antworten
  • Forum-Beiträge: 16

22.08.2014, 17:01:09 via Website

Das wüsste ich auch gerne...ich bin noch nicht dahinter gekommen

Antworten
  • Forum-Beiträge: 282

22.08.2014, 17:03:00 via Website

Ich denk du meinst die Methode Class.forName :) (funktioniert auch ;) )

Danke!

LG Jakob

Antworten
  • Forum-Beiträge: 11.135

22.08.2014, 17:04:15 via App

Gut hatte gerade nicht den richtigen Namen im Kopf.
Vlt muss in den String noch das Package rein.

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

Antworten
  • Forum-Beiträge: 16

22.08.2014, 17:05:30 via Website

Jakob N.

Ich denk du meinst die Methode Class.forName :) (funktioniert auch ;) )

Danke!

Hmmm...könntest du mal ein Beispiel posten? Soweit ich mich erinnern kann hat das nicht funktioniert...

Antworten
  • Forum-Beiträge: 282

22.08.2014, 17:08:14 via Website

try {
  Class<?> c = Class.forName("dein.package.com.ActivityName");
  Intent intent = new Intent(this, c);
} catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

— geändert am 22.08.2014, 17:08:43

LG Jakob

Antworten
  • Forum-Beiträge: 11.135

22.08.2014, 18:15:05 via App

Vlt solltest du noch wigendwie Lrüfen ob die aufgerufene Klasse eine Activity ist.
Wenn nicht gibts nen Problem.

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

Antworten
  • Forum-Beiträge: 11.135

22.08.2014, 18:26:01 via App

Weiss ich ncht aber wass passiert denn wenn der Angegebene String nur ne normale Klasse und keine Activity ist?
Das würde mich mal Interessieren.
Vlt musst du nur ne weitere exception behandeln.

— geändert am 22.08.2014, 18:26:22

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

Antworten
  • Forum-Beiträge: 282

22.08.2014, 18:36:53 via Website

Das weiß ich jetzt auch nicht, muss man probieren.

Ich starte ja die Activity nicht explizit. Sondern übergeben den Intent im try noch einen PendingIntent (falls dieser PendingIntent null ist füge ich ihn nicht der Notifiaction zu, sonst schon). Dieser ist vor dem try mit null initalisiert. Und wenn ich jetzt etwas mitgeben das keine Activity ist oder generell keine vorhandene Klasse, wird beim Klick auf die Notifiaction einfach nichts geöffnet.

LG Jakob

Antworten
  • Forum-Beiträge: 11.135

22.08.2014, 18:39:44 via App

Ich mache das auch über einen Intent +PendingIntent für Notifications.
Ich nutze das für GCM da kann man dann online im web ne Nachricht schreiben die an alle gesendet werden soll und die bei click aufzurufende Activity kann ich da ebenfalls festlegen

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

Antworten
  • Forum-Beiträge: 282

22.08.2014, 19:42:21 via App

Genau dass habe ich programmiert, weil du damals gesagt hast dass du das gemacht hast ;)

LG Jakob

Antworten
  • Forum-Beiträge: 11.135

22.08.2014, 19:57:24 via App

Ist eine gute Idee, das so zu machen. :)
So muss man keine Umständlichen If abfragen oder so machen sondern kann einfach die Activity angegeben.
Ich habe das jetzt schon einige Zeit im Einsatz.
Bis auf 2 Fehler habe isch bisher keine Probleme Feststellen können.
Vlt wäre es von Vorteil ein 2. Intent auf deine MainActivity zu machen und dieses zu startenfalls der string mit der Activity falsch ist oder keiner Angegeben ist.

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

Antworten
  • Forum-Beiträge: 282

22.08.2014, 20:19:42 via App

Welche Fehler sind aufgetreten?

Will manchmal keinen PedingIntent hinzufügen, sondern dem User nur eine Information anzeigen ;)

Geht das eigentlich bzw. was haktest du davon wenn man über GCM einen Text verschickt der dann ausgeführt wird? Kann soetwas überhaupt reintheoretisch funktionieren? (zB um in den sharedpreferences etwas zu ändern oder ein Item bei einer Liste hinzuzufügen)

— geändert am 22.08.2014, 20:19:51

LG Jakob

Antworten
  • Forum-Beiträge: 11.135

22.08.2014, 20:35:06 via App

Ne das geht nur wenn du ifs erstellst.
Aber ich habe z.b eine Gcm Message die jeder User Aufs Handy bekommt wenn sich eine Website ändert, also wenn neue News etc. hinzugefügt werden.
So kann ich in meinem Gcm Message Formalt das Intent Angeben welche Activity geöffnet werden soll.
So kann ich auch andere Activities öffnen lassen oder messages senden die andere Activiies aufrufen ohne den Code zu ändern oder ein Update herauszubringen.

— geändert am 22.08.2014, 20:36:04

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

Antworten