Menu:

F√ľr den Benutzer

Das Ziel von Expenses ist es, anlegen von Ausgaben so einfach wie m√∂glich zu machen. Daher m√∂chten wir dem Benutzer Apps empfehlen, die diese API verwenden. Melden sie sich bei uns, wenn sie Interesse daran haben, in die Liste aufgenommen zu werden.

API f√ľr Ausgaben

Expenses stellt mithilfe von Intents eine API bereit, um Ausgaben zu erzeugen. Andere Apps k√∂nnen entweder Daten aktiv an Expenses schicken, oder Daten f√ľr Expenses bereitstellen. Dies wird im folgenden mithilfe einer fiktiven Kino-App erkl√§rt.

Ausgabe erzeugen

Apps k√∂nnen Daten direkt an Expenses senden, um Ausgaben zu erstellen. So kann eine Kino-App es dem Benutzer erm√∂glichen, nachdem er Film und Anzahl der Tickets ausgew√§hlt hat, aus der App heraus schnell eine Ausgabe zu erstellen:

Intent intent = new Intent("de.weggerle.expenses.SET");
/* put data into intent */
intent.putExtra("app", "Kino-App");
intent.putExtra("category", "Freizeit");
intent.putExtra("subcategory", "Kino");
intent.putExtra("amount", <Preis>);
intent.putExtra("date", <Datum>);
intent.putExtra("note", <Filmtitel>);

final PackageManager packageManager = getPackageManager();
if (packageManager.queryIntentActivities(intent, 0).size() > 0) {
    Intent chooser = Intent.createChooser(intent, "Bitte App w√§hlen:");
    startActivity(chooser);
} else {
    /* no app found that can handle the intent */
    Toast.makeText(this, "Expenses nicht installiert", Toast.LENGTH_LONG).show();
}

Der Codeschnipsel erzeugt zuerst einen passenden Intent. Wichtig ist der Identifikationsstring "de.weggerle.expenses.SET". Anschlie√üend werden die Daten f√ľr die Ausgabe in den Intent gelegt. Die einzelnen Daten werden unten in der Tabelle n√§her erkl√§rt. 

Anschlie√üend wird gepr√ľft, ob es auf dem Ger√§t des Benutzers eine App gibt, die mit "de.weggerle.expenses.SET" umgehen kann. Oder anders ausgedr√ľckt: es wird gepr√ľft, ob Expenses installiert ist. Ist dies der Fall wird die App gestartet. Wenn sie, wie im Beispiel, √ľber startActivity gestartet wird, brauchen sie nichts weiter zu machen. Sie k√∂nnen Expenses aber auch mit startActivityForResult starten. Dann haben sie die M√∂glichkeit, das Ergebnis des Aufrufs in ihrem Code in onActivityResult entgegenzunehmen. Expenses schickt in diesem Fall die gleichen, aber eventuell vom Benutzer modifizierten Daten zur√ľck. 

Wenn keine passende App gerufen liegt es an ihnen, wie sie darauf reagieren. Im Beispiel wird dem Benutzer eine entsprechende Meldung angezeigt.

Ausgabe bereitstellen

Benutzer k√∂nnen aus Expenses heraus eine Anfrage an alle installierten Apps starten, um Daten f√ľr eine Ausgabe zu erhalten. So kann zum Beispiel eine Kino-App Daten liefern, so dass der Benutzer schnell und einfach seinen Kinobesuch als Ausgabe eintragen kann. 

Damit eine App als Datenlieferant f√ľr Ausgaben von Android erkannt wird, muss in der Manifest.xml die entsprechenende activity um den folgenden intent-filter erweitert werden:

<activity
    -- activity beschreibung -- >
    <intent-filter>
        <action android:name="de.weggerle.expenses.GET"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
    <intent-filter>
        -- andere intent-filter --
    </intent-filter>
</activity>

Diese Activity wird dann gestartet, wenn der Benutzer die Anfrage startet. Um bei dem Beispiel mit der Kino-App zu bleiben kann der Benutzer nun einen Film und Anzahl der Tickets w√§hlen. Es ist nun Aufgabe der Kino-App, die ausgew√§hlten Daten an Expenses zur√ľckzuschicken. Dies k√∂nnte zum Beispiel so aussehen:

Intent result = new Intent();
result.putExtra("app", "Kino-App");
result.putExtra("category", "Freizeit");
result.putExtra("subcategory", "Kino");
result.putExtra("amount", <Preis>);
result.putExtra("note", "<Filmtitel>");
result.putExtra("date", <Datum>);
setResult(RESULT_OK, result);
finish();

Die Tabelle unten erklärt die Verwendung der Daten.

Datenbeschreibung

Datentypen und Verwendung
Name Datentyp Beschreibung
app java.lang.String Wird verwendet, um einen √úberblick √ľber alle Apps zu erhalten, die dieses Feature verwenden. Dient au√üerdem als Gruppe, falls category nicht angegeben wird. Kann weggelassen werden.
category java.lang.String Die Gruppe, unter der die Ausgabe abgelegt wird. Wenn category nicht angegeben wird, wird app als Gruppe genommen. Wenn auch app nicht angegeben wird, wird die Gruppe nicht gesetzt.
subcategory java.lang.String Die Untergruppe, unter der die Ausgabe abgelegt wird. Wird nur ausgewertet, wenn entweder category oder app angegeben ist. Kann weggelassen werden.
amount float Wird als Ausgabenkosten interpretiert. Kann weggelassen werden.
note java.lang.String Der Inhalt wird in das Note-Textfield geschrieben. Kann weggelassen werden.
date long Wird als Timestamp interpretiert und stellt das Datum dar, an dem die Ausgabe getätigt wird. Kann weggelassen werden.