Programmier Tutorial - Apps für Android entwickeln - Der ShareActionProvider in Android

Programmier Tutorial – Teil 13: Der ShareActionProvider in Android


Im dreizehnten Teil unseres großen Android™ Tutorials werden wir unserer Finanz-App einen ShareActionProvider hinzufügen.

Dadurch können unsere Benutzer sehr einfach Inhalte der Android Anwendung mit ihren Freunden teilen oder an andere Apps senden.

In dieser Lektion werden wir zunächst im Theorie-Teil auf die Grundlagen des ShareActionProviders ausführlich eingehen.

Anschließend fügen wir unserer App den ShareActionProvider hinzu. Die Share-Aktion werden wir über einen weiteren Menüeintrag der AktiendetailActivity ausführen lassen.

Als Inhalt werden die angezeigten Finanzinformationen über den ShareActionProvider anderen Apps zur Verfügung gestellt.

Nun wünschen wir euch viel Spaß bei dem dreizehnten Teil unseres großen Android Tutorials. Los geht’s!

1. Was ist ein ShareActionProvider in Android?

Android Apps Programmieren Online-Kurs

Unser großes
Android Online-Kurs
Gesamtpaket



Weitere Infos

Mit einem ShareActionProvider können wir andere Apps nutzen um Texte, Photos, Videos und Links für uns zu teilen (sharen).

Dabei müssen wir noch nicht einmal wissen welche Sharing-Apps auf dem Android Gerät unserer Benutzer installiert sind.

Wir müssen Android nur mitteilen welche Daten geteilt werden sollen und das Android System wird unseren Usern eine Liste mit Apps anzeigen, die diese Daten teilen können.

Die angezeigten Apps müssen wir nicht kennen. Sie könnten sogar erst nach unserer App entwickelt worden sein und sie werden dennoch in der Liste angezeigt.

Mit der Einführung des ShareActionProviders in Android 4.0 (API Level 14) ist es sehr einfach möglich, eine effektive und benutzerfreundliche Share-Funktion in die Action Bar der eigenen Android App zu integrieren. Dank der Android Support Library können wir den ShareActionProvider auch für frühere Android-Versionen nutzen.

Der Provider nutzt ein ACTION_SEND Intent und adressiert diesen an jede App, welche die entsprechende Aktion ausführen kann.


Dabei wird der zu teilende Inhalt als EXTRA dem Intent hinzugefügt, entweder als Text, URI oder Binärdaten.

1.1 Die Klasse ShareActionProvider in Android

Die Klasse ShareActionProvider ist von der Basisklasse ActionProvider abgeleitet. Ein ActionProvider ermöglicht eine bessere Interaktion mit den Menükomponenten in Android.

Er ist verantwortlich für das Erzeugen von Action-Views in der Action Bar, kann dynamisch Untermenüs zu einem Menüeintrag erstellen und auch Standardaufrufe ausführen.

Es gibt zwei Wege ActionProvider zu benutzen:

  1. Binden des ActionProviders direkt an einen Menüeintrag mit Hilfe der setActionProvider-Methode.
  2. Deklarieren des ActionProviders in einer XML-Menü Ressourcen Datei.

Ein besonderer ActionProvider ist der ShareActionProvider. Wie der Name schon erahnen lässt, ist dieser für das Teilen von Inhalten (share action) zuständig.

Ein ShareActionProvider ist verantwortlich für das Erstellen von Views, welche das Teilen von Inhalten ermöglichen, und auch für das Anzeigen eines Untermenüs, welches Sharing Activities enthält.

Wird ein ActionProvider an einen Menüeintrag der Action Bar gebunden, übernimmt er sowohl das Aussehen, als auch das Verhalten dieses Elements. Im Falle eines ShareActionProviders müssen wir nur den Share-Intent zur Verfügung stellen und der Provider übernimmt den Rest für uns.

2. Share-Menüeintrag in das Options Menu einfügen

Wenn ein ShareActionProvider dem Options Menu hinzugefügt wird, erscheint er als zusätzliches Symbol in der Action Bar.

Wird auf das Share-Symbol geklickt, öffnet sich ein Drop Down-Menü, welches die möglichen Share-Apps als Menüeinträge enthält. Bei Klick auf eines dieser Elemente wird die entsprechende Anwendung mit dem ACTION_SEND Intent gestartet.

Ein weiteres Icon ist rechts daneben angeordnet. Es enthält das Symbol der App, mit der das letzte Mal die Share-Aktion ausgeführt wurde.

Unser ShareActionProvider soll für einen neuen Share-Menüeintrag im Menü der AktiendetailActivity registriert werden. Dazu müssen wir zuerst den neuen Menüeintrag in das Options Menu der Action Bar einfügen.

plhq_teaser_hbox_gelb_fotolia_RA Studio_46292813

Unser großes
Android Online-Kurs
Gesamtpaket



Weitere Infos

Hierfür sind die folgenden beiden Schritte notwendig:

  1. Definieren der String-Konstante in der strings.xml Ressourcen-Datei
  2. Definieren des Share-Menüeintrags in der XML-Layout Datei menu_aktiendetail.xml

2.1 Definieren der String-Konstante in der strings.xml Ressourcen-Datei

Der erste Schritt ist schnell gemacht. Wir öffnen die Ressourcen-Datei strings.xml. Sie befindet sich in dem res/values-Verzeichnis in unserem Android Projekt. In sie fügen wir einen Bezeichner für den neuen Menüeintrag ein.

In die strings.xml Datei fügen wir folgende Zeile ein:

strings.xml

<string name="action_teile_aktiendaten">Share</string>

In Android Studio sollte die strings.xml Datei jetzt wie folgt aussehen:

ShareActionProvider string

Definieren der String-Konstante für den Share-Menüeintrag der Action Bar

Auf die neu definierte String-Konstante werden wir im nächsten Schritt von der menu_aktiendetail.xml Layout Datei aus verweisen. Dadurch sind wir in der Lage die Bezeichnung für den Menüeintrag leicht zu ändern oder ihn in andere Sprachen zu übersetzen.

2.2 Definieren des Share-Menüeintrags in menu_aktiendetail.xml

Als Nächstes fügen wir einen weiteren Menüeintrag in das Options Menu unserer AktiendetailActivity ein. Dazu öffnen wir die XML-Layout Datei menu_aktiendetail.xml, die sich in dem res/menu-Verzeichnis befindet.

Sie enthält bereits die beiden Menüelemente, Settings und Starte Browser.

In den vorhandenen Quellcode fügen wir folgende Zeilen ein:

menu_aktiendetail.xml

<item android:id="@+id/action_teile_aktiendaten"
        android:title="@string/action_teile_aktiendaten"
        app:showAsAction="always"
        app:actionProviderClass="android.support.v7.widget.ShareActionProvider" />

Die angegebene id ermöglicht uns später diesen Menüeintrag in der Ressourcen-Datei R zu finden. Den title setzen wir nicht statisch, sondern verweisen auf die, im vorherigen Schritt definierte, String-Konstante.

Mit dem Attribut showAsAction legen wir fest, dass dieser Menüeintrag immer als Aktion in der Action Bar angezeigt wird und nicht in das Overflow Menu wandert.

Das Attribut actionProviderClass gibt an welche Klasse als ShareActionProvider verwendet werden soll. Da wir für unsere App die minSdkVersion auf API Level 10 gesetzt haben, werden wir mit der Klasse der Support Library arbeiten.

Durch die Support Library ist es möglich den ShareActionProvider auch für Android Versionen vor Version 4.0 (API Level 14) zu nutzen.

In Android Studio sollte die menu_aktiendetail.xml Datei nun folgendermaßen aussehen:

ShareActionProvider menu

Definieren eines Share-Menüeintrags für das Options Menu der AktiendetailActivity

Mit diesem zweiten Schritt haben wir den Share-Menüeintrag der AktiendetailActivity in die Action Bar des Options Menu eingefügt. Als Nächstes möchten wir den neuen Menüeintrag an den ShareActionProvider binden und mit ihm die angezeigten Aktiendaten für andere Share-Apps bereitstellen.

3. Erstellen eines ShareActionProviders in Android

Der neue Share-Menüeintrag der AktiendetailActivity ist jetzt in der Action Bar integriert.

Das Share-Symbol wird bereits angezeigt. Es ist jedoch momentan noch ohne Funktion und reagiert noch nicht auf Benutzereingaben.

Wir werden dies nun ändern. Dazu erstellen wir einen ShareActionProvider und registrieren ihn für den Share-Menüeintrag.

Der Provider bringt alle Funktionalität zum Teilen von Daten selbst mit.

Für das Erstellen des ShareActionProviders sind die folgenden Schritte notwendig:

  1. Erweitern der onCreateOptionsMenu-Methode mit unserem Quellcode, mit dem wir den ShareActionProvider erstellen und ihm einen SEND-Intent übergeben.
  2. Ergänzen der benötigten Import-Anweisungen.

Alle Änderungen nehmen wir in der AktiendetailActivity-Klasse unseres Android Projekts vor.

3.1 Erweitern der onCreateOptionsMenu-Methode

Wir öffnen die Klasse AktiendetailActivity.java, die sich in dem Package-Ordner unseres Android Projekts befindet. Darin scrollen wir bis zu der onCreateOptionsMenu-Methode, mit deren Hilfe das Options Menu erzeugt wird.

Die onCreateOptionsMenu-Methode überschreiben wir mit folgendem Quellcode:

AktiendetailActivity.java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Fügt auch den Share-Icon der Action Bar hinzu
    getMenuInflater().inflate(R.menu.menu_aktiendetail, menu);

    // Die AktiendetailActivity wurde über einen Intent aufgerufen
    // Wir lesen aus dem empfangenen Intent die übermittelten Daten aus
    String aktienInfo = "";
    Intent empfangenerIntent = this.getIntent();
    if (empfangenerIntent != null && empfangenerIntent.hasExtra(Intent.EXTRA_TEXT)) {
        aktienInfo = empfangenerIntent.getStringExtra(Intent.EXTRA_TEXT);
    }

    // Holt das Menüeintrag-Objekt, das dem ShareActionProvider zugeordnet ist
    MenuItem shareMenuItem = menu.findItem(R.id.action_teile_aktiendaten);

    // Holt den ShareActionProvider über den Share-Menüeintrag
    ShareActionProvider sAP;
    sAP = (ShareActionProvider) MenuItemCompat.getActionProvider(shareMenuItem);

    // Erzeugen des SEND-Intents mit den Aktiendaten als Text
    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    //noinspection deprecation
    shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
    shareIntent.setType("text/plain");
    shareIntent.putExtra(Intent.EXTRA_TEXT, "Daten zu: " + aktienInfo);

    // Der SEND-Intent wird an den ShareActionProvider angehangen
    if (sAP != null ) {
        sAP.setShareIntent(shareIntent);
    } else {
        String LOG_TAG = AktiendetailActivity.class.getSimpleName();
        Log.d(LOG_TAG, "Kein ShareActionProvider vorhanden!");
     }

    return true;
}

Der obere Quellcode ist zum größten Teil selbsterklärend. Zuerst füllen (inflate) wir das Options Menu mit den Menüelementen der Layout-Datei menu_aktiendetail.xml. Dabei wird auch der Share-Icon in die Action Bar eingefügt.

Anschließend lesen wir die übertragenen Finanzdaten aus dem empfangenen Intent aus und speichern die Daten in der Variable aktienInfo vom String-Datentyp ab. Diese Aktiendaten werden wir mit Hilfe des ShareActionProviders anderen Share-Apps zur Verfügung stellen.

Nun kommt der entscheidende Teil dieser Android Lektion. Der ShareActionProvider ist dem Share-Menüeintrag zugeordnet und wird über diesen erzeugt. Daher lesen wir uns als Erstes den Share-Menüeintrag mit Hilfe der findItem-Methode in Zeile 15 aus.

Mit dem Share-Menüeintrag können wir den ShareActionProvider erstellen lassen. Dies geschieht in den Zeilen 18 und 19. Wir verwenden dazu die Klassen der Android Support Library, wodurch unsere App auch kompatibel zu Android Versionen vor Version 4.0 ist.

Möchtet ihr ausschließlich für aktuellere Android Versionen entwickeln, könnt ihr ohne die Support Library arbeiten. Nützliche Informationen über den ShareActionProvider findet ihr diesbezüglich an folgenden Stellen:

Mit den Zeilen 22 bis 26 erstellen wir unseren Share-Intent. Der Intent benutzt die Aktion ACTION_SEND. Mit dem Flag in Zeile 24 verhindern wir, dass die aufzurufende Share-Activity in den Activity Stack aufgenommen wird. Dadurch wird später immer unsere App geöffnet, wenn das Symbol unserer App geklickt wurde und nicht unter Umständen die Activity einer anderen App.

Da wir unsere Aktiendaten in einem normalen String gespeichert haben, setzen wir den Type mit setType auf text/plain. Die zu übertragenden Daten fügen wir mit putExtra dem Intent zu. Sie bestehen aus den angezeigten Aktiendaten und etwas Text.

plhq_teaser_hbox_gelb_fotolia_RA Studio_46292813

Unser großes
Android Online-Kurs
Gesamtpaket



Weitere Infos

Als letzten Schritt müssen wir den Share-Intent an den ShareActionProvider anhängen. Dies führen wir mit den Zeilen 29 bis 34 aus. Sollte kein ShareActionProvider vorhanden sein, geben wir eine Log-Meldung, die über das Problem informiert, aus.

3.2 Ergänzen der benötigten Import-Anweisungen

Da wir in dem oberen Quelltext einige zusätzliche Klassen bzw. Interfaces benutzen, müssen wir diese noch mit Hilfe von Import-Anweisungen bekannt machen.

Dazu fügen wir folgende Import-Anweisungen in die AktiendetailActivity-Klasse ein:

AktiendetailActivity.java

import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.ShareActionProvider;

In Android Studio sollte die Datei AktiendetailActivity.java jetzt wie folgt erweitert worden sein:

shareActionProvider intent

Erweitern der onCreateOptionsMenu() Methode [A] und Erstellen des ShareActionProviders

In der oberen Abbildung sind die notwendigen Änderungen an der AktiendetailActivity blau markiert. Der große Rahmen (Markierung A) umschließt die onCreateOptionsMenu-Methode, mit deren Hilfe wir den ShareActionProvider erstellen und ihm den Share-Intent anfügen.

Die beiden erforderlichen Import-Anweisungen sind mit blauen Linien unterstrichen.

4. Testen unserer Android App und des ShareActionProvider

Alle notwendigen Änderungen an den Quelltexten unseres Android Projekts sind vorgenommen. Nun wollen wir unsere App testen. Dazu installieren wir die Anwendung auf unser angeschlossenes Android Gerät (Smartphone oder Tablet) und lassen sie dort ausführen.

Um die App auf dem Android Gerät starten zu können, müssen alle Schritte von Teil 3 des Android Tutorials befolgt worden sein.

Hier noch einmal in Kürze die wichtigsten Arbeitsschritte.

Zuerst schließen wir unser Android Gerät an den PC an und stellen eine Verbindung über die ADB (Android Debug Bridge) her. Danach klicken wir auf das Run 'app'-Symbol. Unser Android Projekt wird dadurch neu erstellt und auf dem angeschlossenen Gerät ausgeführt.

Das Run 'app'-Symbol befindet sich in der oberen Menüleiste, siehe folgende Abbildung:

android studio project avd run

Android App über das Run App-Symbol starten

Nach einigen Momenten öffnet sich der Choose Device-Dialog. In ihm nehmen wir die folgenden Einstellungen vor:

  1. Radio Button Choose a running device aktivieren
  2. Das angeschlossene Android Gerät auswählen
  3. Mit einem Klick auf den OK-Button die Installation unserer App auf das Gerät starten
android choose device

Auswählen des angeschlossenen Android Geräts zum Aufspielen unserer App

Der Dialog schließt sich und unsere Android App wird auf das angeschlossene Gerät übertragen und installiert. Die Installation dauert nur einen kurzen Augenblick und verläuft fast unbemerkt im Hintergrund. Danach wird unsere App automatisch gestartet.

5.1 Testen des ShareActionProviders unserer Android App

In der Action Bar der AktiendetailActivity ist jetzt ein weiteres Symbol zu sehen, der Share-Icon des ShareActionProviders. Mit einem Klick auf den Share-Button öffnet sich das DropDown-Menü des ShareActionProviders. Es enthält eine Liste aller Anwendungen, die unseren Share-Intent empfangen und weiterverarbeiten können.

Durch Klicken auf eine dieser Apps wird der Share-Vorgang gestartet und die aufzurufende Anwendung erhält über den ACTION_SEND-Intent die zu übertragenden Aktiendaten. Was die andere Anwendung damit macht, liegt nicht in unserem Einflussbereich. Wir übergeben ihr lediglich unsere Daten.

Der eben beschriebene Vorgang ist in der unteren Abbildung dargestellt:

android ShareActionProvider

Mit einem Klick auf den Share-Menüeintrag wird mit Hilfe des ShareActionProviders der Aktienkurs geteilt

Nachdem die aufgerufene Anwendung den Share-Vorgang abgeschlossen hat, kehren wir wieder in unsere eigene Android App zurück.

5.2 Video – Teilen von Inhalten mittels ShareActionProvider

Nun möchten wir unsere Android App auch einmal in der aktuellen Entwicklungsstufe im Video sehen. Dazu haben wir das folgende kurze Video erstellt, in dem die neue Funktion unserer App vorgestellt wird:

In unserer Android App navigieren wir zuerst in den Aktiendetail-Bildschirm, da sich der Share-Button in der Action Bar der AktiendetailActivity befindet.

Mit einem Klick auf den Share-Button öffnet sich das DropDown-Menü, welches der ShareActionProvider zur Verfügung stellt. In dem Menü sind alle Anwendungen aufgelistet, die unseren ACTION_SEND-Intent empfangen und weiterverarbeiten können.

Wir klicken auf den ersten Eintrag S Memo und öffnen dadurch eine Notizen App auf dem Android Gerät. Der geöffneten App werden über den Share-Intent die angezeigten Aktiendaten übermittelt und die App nutzt diese Daten auf ihre Weise. Mit einem Klick auf Speichern ist der Share-Vorgang abgeschlossen und wir gelangen wieder zurück in unsere eigene Anwendung.

Diesmal wird neben dem Share-Symbol ein weiterer Icon angezeigt, er stellt die kürzlich aufgerufene Share-App dar. Klicken wir nun auf diesen Button, öffnet sich die Share-Anwendung direkt.

Zusammenfassung

In der dreizehnten Lektion unseres großen Android Tutorials haben wir den ShareActionProvider von Android näher kennengelernt. Er eignet sich hervorragend die Share-Funktionalität anderer auf dem Android Gerät installierter Apps mit zu verwenden.

Zu Beginn dieser Lektion haben wir die Theorie zu dem ShareActionProvider betrachtet und die Klasse des Providers vorgestellt. Anschließend haben wir unsere Android App um einen Share-Menüeintrag erweitert. Der neue Menüeintrag wurde in das Options Menu der Action Bar eingefügt.

Als Nächstes haben wir den ShareActionProvider an den neuen Menüeintrag gebunden. Dazu haben wir die entsprechenden Klassen der Android Support Library verwendet, damit unsere App auch abwärtskompatibel ist, da der ShareActionProvider erst mit Android Version 4.0 (API Level 14) eingeführt wurde.

Wie in allen unseren vorherigen Lektionen haben wir am Ende unsere Android Anwendung getestet und in einem Video die neue Funktionalität vorgestellt.

In der nächsten Lektion werden wir das Aktualisieren der Finanzdaten komfortabler gestalten. Es soll den Usern möglich sein, mit einer Swipe Down-Geste die Aktienliste neu zu laden. Diese Funktion werden wir mit Hilfe des SwipeRefreshLayouts in unsere Android App implementieren.



Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.