Englisch version   English version


Version Anpassungen
1.0 (2020-04-16) Initiale Version
2.0 (2020-04-29) - Ermöglicht die Auswertung von Start- und Rückgabe-Werten
- Start als eigenständiger oder abhängiger Prozess
2.1 (2020-06-03) MyAppName, MyPackageName hinzugefügt

Motivation

App Inventor ermöglicht es, andere Activities mit der ActivityStarter-Komponente zu starten. Leider ist das Starten von installierten Apps sehr umständlich. Gemäß Anleitung muss die .apk der zu startenden App herunter geladen und darin der Paket-Name heraus gefunden werden. Beides ist weder einfach, noch immer möglich.

Diese Extension vereinfacht das Starten von Apps.


In­halts­ver­zeich­nis

Download

Verwendung

Paket-Namen (Package Name)

Start-Modi

Startwerte

Rückgabewerte

Referenz

Beispiel

Datenaustausch zwischen zwei AI2-Apps

Aufruf über App-Liste

Werkzeuge

Download

Das ZIP-Archiv UrsAI2AppLauncher zum Download. Das Archiv enthält den Quellcode, das kompilierte Binary zum Upload in den App Inventor und eine Beispiel-Anwendung.

Verwendung

Paket-Namen (Package Name)

Apps müssen über ihren Paketnamen (package name, z.B. "de.ullisroboterseite.ursai2applauncher") gestartet werden. Die Methode getNameList liefert eine Liste der Bezeichnungen aller Apps, die gestartet werden können. Um hier eine Vorauswahl zu treffen, kann ein Text zum Filtern der Liste angegeben werden. Es werden nur die Apps gelistet, deren Bezeichnung den angegeben Filtertext enthalten. Die Liste kann z.B. in einer ListPicker-Komponente präsentiert werden.

Die Methode PackageFromName liefert den zur App zugehörigen Paketnamen. Dieser kann dann dazu benutzt werden, die bezeichnete App zu starten.

Start-Modi

Die zu startende App kann auf zwei Arten gestartet werden:

In beiden Fällen können der gestarteten App Startwerte mitgegeben werden.

Nach dem Start einer App wird das Ereignis AfterAppLaunched ausgelöst. Es gibt Auskunft darüber, ob der Start der App erfolgreich war.

Startwerte

Der Start einer App erfolgt in der Android-Welt über Intents. Ein Intent ist eine abstrakte Beschreibung einer auszuführenden Operation. Er dient u.a. zum starten von Apps. Der Intent enthält alle Informationen, die zum starten einer App benötigt werden und enthält auch die auszutauschenden Daten.

Austauschdaten zwischen Apps können dem Intent als sogenannte Extras übergeben werden. Extras sind eine Liste von Schlüssel-Werte-Paare. Die gestartete App kann diese Werte abrufen und auswerten.

Über die verschiedenen Varianten der Launch...-Methoden kann die zu startende App mit Startwerten versorgt werden.

  1. Zunächst einmal kann die App ohne zusätzlichen Startwert gestartet werden (LaunchApp, LaunchAppForResult).
  2. Ist  die zu startende App ebenfalls eine AI2-App, kann die AI2-Standardmethode zur Parameterübergabe genutzt werden. AI2 wertet den Schlüssel "APP_INVENTOR_START" aus und stellt den zugehörigen Wert über die Methode Control - getStartValue bzw. Control - getPlainStartText zur Verfügung. LaunchAI2App, LaunchForResultAI2App tragen den Parameter StartValue unter dem Schlüssel "APP_INVENTOR_START" in den Intent ein.
  3. LauchAppExtra und LauchForResultAppExtra erlauben die Übergabe eines einzelnen Schlüssel-Werte-Paares.
  4. LauchAppExtraList und LauchForResultAppExtraList übergeben eine Liste von Schlüssel-Werte-Paaren.

Rückgabewerte

Der folgende Abschnitt ist nur relevant bei als abhängig gestartete Apps. Nur diese können Werte zurück liefern.

Immer kann die aufgerufene App abgebrochen werden, ohne Ergebnisse zurück zu liefern. In diesem Fall wird nach Abbruch der aufgerufenen App das Ereignis ActivityCanceled ausgelöst.

Wurde die aufgerufene App regulär beendet, wird das Ereignis AfterActivity ausgelöst und es können Rückgabewerte übergeben werden. Diese werden, wie bei den Startwerten, intern als Schlüssel-Werte-Paare in einem Intent abgelegt. AI2 Apps können Rückgabewerte über die Blöcke close screen with value und close screen with plain text zur Verfügung stellen. AI2 stellt diesen Wert als Schlüssel-Werte-Paar mit dem Schlüssel "APP_INVENTOR_RESULT" in den Intent ein.

Die aufrufende App kann den zurückgelieferten Intent auswerten. Die Extension stellt die hierzu notwendigen Methoden bereit.

  1. Das Ereignis AfterActivity besitzt den Parameter Result. Wenn die aufgerufene App einen Wert mit dem Schlüssel "APP_INVENTOR_RESULT" zurück gibt, wird dieser in einen String konvertiert und im Parameter Result zur Verfügung gestellt.
  2. Die Methode getResultKeys liefert eine Liste aller Schlüsselwerte der Schlüssel-Werte-Paare.
  3. Die Methode getResultValue liefert den zum angegebenen Schlüssel zugehörigen Wert als String.
  4. Die Methode getResultObject liefert den zum angegebenen Schlüssel zugehörigen Wert als Object, d.h. mit dem gleichen Datentyp, wie er von der aufgerufenen App abgelegt wurde.

Referenz

Block Funktion Anmerkung
App- und Package-Namen
getNameList Liefert die Bezeichnungen der installierten und startfähigen Apps als alphabetisch sortierte Liste von Texten.

Über den Parameter Filter kann eine Vorauswahl getroffen werden. Es werden nur die Apps ausgeliefert, deren Namen den angegeben Text enthält. Wird eine leerer Text ("") angegeben, wird nicht gefiltert. Groß-/Kleinschreibung wird ignoriert.
Der Filter wird mit der Java-Methode String.contains() ausgewertet. Vor der Auswertung werden Filterwert und App-Bezeichnung in per String.toLowerCase() in Kleinbuchstaben umgewandelt.
getPackageList Liefert die Paketnamen der installierten und startfähigen Apps als alphabetisch sortierte Liste von Texten.

Über den Parameter Filter kann eine Vorauswahl getroffen werden. Es werden nur die Apps ausgeliefert, deren Namen den angegeben Text enthält. Wird eine leerer Text ("") angegeben, wird nicht gefiltert. Groß-/Kleinschreibung wird ignoriert.
Der Filter wird mit der Java-Methode String.contains() ausgewertet. Vor der Auswertung werden Filterwert und App-Bezeichnung in per String.toLowerCase() in Kleinbuchstaben umgewandelt.
PackageFromName Liefert den Paketnamen (package name) der App deren Bezeichnung im Parameter AppName übergeben wurde. Es wird einen leerer Text ("") zurück geliefert, wenn kein Paketname ermittelt werden konnte.
MyAppName
MyPackageName
Liefern den Namen der eigenen App bzw. deren Paketnamen.  
App starten
LauchApp
LauchAppForResult
Startet die App mit dem angegebenen Paketnamen entweder als eigenständiger oder als abhängiger Prozess (s.o.). Der Erfolg dieser Aktion wird über den Event AfterAppLaunched (s.u.) mitgeteilt.
LaunchAI2App
launchforresultai2app
Startet die App mit dem angegebenen Paketnamen entweder als eigenständiger oder als abhängiger Prozess (s.o.).

StartValue: Der an die zu startende App zu übergebene Startwert.
AI2 wertet den Schlüssel "APP_INVENTOR_START" aus und stellt den zugehörigen Wert über die Methode getStartValue  getstartvalue bzw. getPlainStartText getPlainStartText zur Verfügung.

getStartValue erlaubt die Übergabe beliebiger Objekte, auch Listen.
LauchAppExtra
LauchForResultAppExtra
Startet die App mit dem angegebenen Paketnamen entweder als eigenständiger oder als abhängiger Prozess (s.o.).

Über das Parameterpaar Key/Value können der gestartet App Informationen übermittelt werden. Key und Value erwarten Texte als Argumente.
Werden andere Parameter-Typen als Texte (Strings) übergeben, wandelt AI2 diese in Strings um.
LauchAppExtraList
LauchForResultAppExtraList
Startet die App mit dem angegebenen Paketnamen entweder als eigenständiger oder als abhängiger Prozess (s.o.).

Der Parameter Pairs ist eine Liste von Listen mit jeweils zwei Werten. Der erste Wert wird als Schlüssel, der zweite als zugehöriger Wert interpretiert.
Weiter Information hierzu findet man bei
http://ai2.appinventor.mit.edu/reference/other/activitystarter.html
oder
https://appinventor.mit.edu/explore/ai2/activity-starter.html
AfterAppLaunched Liefert das Ergebnis des Startversuchs:
0: erfolgreich
1: Paket nicht gefunden
2: Pairs nicht korrekt konstruiert
 
Daten-Rückgabe
closeScreenWithValue
closeScreenWithPlainText
Legt die Rückgabewerte fest. AI2 übergibt die angegebenen Werte als Schlüssel-Wert-Paar mit dem Schlüssel "APP_INVENTOR_RESULT".
ActivityCanceled Die aufgerufene App wurde abgebrochen. Rückgabewerte stehen nicht zur Verfügung.
AfterActivity Die aufgerufene App wurde regulär beendet.

Result: Rückgabewert einer AI2-App.
Wenn die aufgerufene App einen Wert mit dem Schlüssel "APP_INVENTOR_RESULT" zurück gibt, wird dieser in einen String konvertiert und im Parameter Result zur Verfügung gestellt.
getResultKeys Liefert eine Liste aller Schlüssel der im Rückgabe-Intent enthaltenen Schlüssel-Werte-Paare. Der Rückgabewert der Funktion ist eine Liste mit Strings.
getResultValue Liefert den zum Schlüssel Key gehörenden Wert als String. Der Wert wird über die Java-Funktion toString konvertiert.
getResultObject Liefert den zum Schlüssel Key gehörenden Wert als Object. Es findet keine Konvertierung statt. AI2 übergibt Werte als JSON-String.

Beispiel

Die Download-Archiv enthält zwei Beispiel-Apps:

Datenaustausch zwischen zwei AI2-Apps

Das erste Beispiel zeigt den Datenaustausch zwischen zwei AI2-Apps.

Die App wird mit ihrem Namen gestartet.
Das Ergebnis des Versuchs wird angezeigt.
Die App liefert einen Liste mit Texten zurück. Die Liste der Schlüssel der Schlüssel-Wert-Paare wird angezeigt und der Wert des Schlüssel-Wertpaares mit dem Schlüssel "APP_INVENTOR_RESULT"

 

Aufruf über App-Liste

Das folgende Beispiel zeigt, wie die Methoden getNameList und PackageFromName dazu verwandt werden können, eine App zu starten. Der Aufruf über LaunchForResult sorgt dafür, dass die startenden App so lange pausiert, bis die aufgerufene App beendet wurde.

  Aufruf der Liste der verfügbaren Apps Auswahl der App "Kamera" Start der App   Anzeige des Abbruchs der aufgerufenen App

Werkzeuge

Für die Erstellung eigener Extensions habe ich einige Tipps zusammengestellt: AI2 FAQ: Extensions entwickeln.

 

To Do

Start einer App über ACTIONs

Erstellung eines Intent und Start einer App über den Intent