25.02.2014 Aufrufe

Android User Android und TV (Vorschau)

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

DEV CORNER<br />

Google Drive nutzen<br />

samte Netzwerkverkehr in AsyncTasks ausgeführt<br />

– jede Aktion gegen Google Drive besitzt<br />

ihren eigenen speziellen AsyncTask.<br />

Damit diese so schlank wie möglich bleiben,<br />

wird mit MyAsyncTask eine Klasse eingeführt,<br />

die sich um den ProgressDialog während<br />

der Wartezeit kümmert. Gleichzeitig<br />

bietet diese Klasse den Activities das Abmelden<br />

<strong>und</strong> wieder Anmelden während des OrientationChange.<br />

Aufgerufen wird das Laden der Benutzerdaten<br />

durch die Befehlsfolge aus Listing 6. In<br />

diesem Aufruf wird eine TaskId, der Activity-<br />

Context (this) sowie der MyAsyncTaskCompletedListener<br />

übermittelt (ebenfalls this).<br />

Der Listener in der Activity empfängt nach<br />

dem Laden der Daten das Ergebnis <strong>und</strong> einen<br />

eventuellen Fehlercode. Eine solche typische<br />

Aktion reduziert sich durch die generische<br />

MyAsyncTask-Klasse auf das in Listing 7 gezeigte<br />

Gerüst.<br />

Hier sind gleich einige Besonderheiten zu<br />

erkennen. Eventuelle Fehler in der Schnittstelle<br />

können bequem mithilfe der Exception<br />

ausgelesen werden. Diese Fehler lassen sich<br />

auf genau drei Fehlercodes reduzieren. 401<br />

bedeutet, dass der Token abgelaufen ist. Weitere<br />

errorCodes zeigen das Überschreiten des<br />

Quota, dem Limit der pro Tag erlaubten Requests<br />

an. Diese errorCodes werden zusammen<br />

mit dem Ergebnis des Aufrufs von My-<br />

AsyncTask per Listener an die zuständige Activity<br />

weitergeleitet.<br />

In der betreffenden Activity kann dann je<br />

nach eintreffendem AsyncTask auf dessen Ergebnis<br />

reagiert werden. Im Falle der Benutzerdaten<br />

werden diese für die Laufzeit der<br />

App gespeichert. Der Name des Benutzers<br />

<strong>und</strong> dessen E-Mail-Adresse werden in der<br />

Activity angezeigt. Anschließend werden die<br />

Wurzel-Verzeichnisse in einem weiteren<br />

Thread von Google Drive gelesen. Das Wort<br />

LISTING 3: Auslesen der Google Accounts<br />

// AccountManager <strong>und</strong> Liste aller Accounts holen<br />

AccountManager accountManager = new GoogleAccountManager(this);<br />

Account[] accounts = accountManager.getAccounts();<br />

LISTING 4: Zugangstoken<br />

accountManager.getAccountManager().getAuthToken(account,<br />

MyConstants.AUTHTOKENSCOPE_DRIVE, null,<br />

this, new AccountManagerCallback() {<br />

speichern<br />

root ist dabei ein Alias für die Id des Wurzelverzeichnisses.<br />

Suchen <strong>und</strong> filtern<br />

Das Auslesen von Verzeichnisinhalten gestaltet<br />

sich etwas umständlich, ist aber der Website<br />

von Google Drive geschuldet. Es ist nicht<br />

möglich, in einem Rutsch den gesamten Inhalt<br />

eines größeren Verzeichnis zu ermitteln.<br />

Stattdessen muss seitenweise geblättert werden.<br />

Der Wert der durch Google Drive zu lie-<br />

@Override<br />

public void run(AccountManagerFuture future) {<br />

try {<br />

// Diesen Token in den Preferences<br />

MyApplication.setAuthToken(future.getResult().getString(<br />

AccountManager.KEY_<br />

AUTHTOKEN));<br />

{<br />

}<br />

}, null);<br />

// Zur Weiterverarbeitung<br />

processTokenReceived();<br />

} catch (OperationCanceledException exception)<br />

} catch (AuthenticatorException exception) {<br />

} catch (Exception exception) {<br />

}<br />

GOOGLE PLAY SERVICES<br />

Ende September 2012 hat Google die Google Play Services eingeführt.<br />

Hierbei handelt es sich um eine kleine Library, die Entwickler<br />

ihren Apps beilegen müssen. Weiterhin handelt es sich um eine<br />

Service-Komponente, die Bestandteil der aktuellen Google Play<br />

Store App ist.<br />

Dieser neue Service erlaubt mithilfe einiger bequemer Methoden,<br />

aus einer App heraus die Auswahl des Google Accounts <strong>und</strong> die<br />

Beschaffung eines Tokens für die Kommunikation mit den Google<br />

Diensten. Dabei werden für die Kommunikation mit dem Benutzer<br />

standardisierte Dialoge verwendet <strong>und</strong> nicht mehr Eigenkreationen<br />

jedes Entwicklers benötigt.<br />

Dieser Schritt ist richtig <strong>und</strong> wichtig – besitzt aber einen gravierenden<br />

Nachteil. Die Nutzung dieser neuen Klassen <strong>und</strong> Methoden ist<br />

von der Existenz der Google Play Store App auf dem Gerät des Benutzers<br />

<strong>und</strong> – erschwerend – einer aktuellen Version dieser App abhängig.<br />

Diese Voraussetzung ist gerade im <strong>Android</strong>-Umfeld nicht<br />

praktikabel <strong>und</strong> zeigt einmal mehr, wie isoliert von der <strong>Android</strong>-<br />

Realität die Google-Entwickler manchmal agieren. Ein solches zentrales<br />

Feature gehört stattdessen in ein Paket ähnlich dem statischen<br />

Support-Package, welches <strong>Android</strong> 3.0/ <strong>Android</strong> 4.0 Features<br />

auch alten <strong>Android</strong>-Geräten beibringt.<br />

Der Entwickler kann diese Prüfungen (App, App-Version) zwar mit<br />

beigefügten API-Aufrufen vornehmen <strong>und</strong> dem Benutzer die Installation<br />

bzw. die Aktualisierung der App anraten. Ob der Nutzer das<br />

dann macht, steht auf einem anderen Blatt. Lehnt der Benutzer die<br />

Prüfung aus welchen Gründen auch immer ab, oder sollte das genutzte<br />

Gerät kein Google-Zertifikat besitzen (Stichwort Noname-<br />

China-Tablet), so muss die App des Entwicklers auf herkömmliche<br />

Art mit Google kommunizieren – <strong>und</strong> genau diese Herangehensweise<br />

zeigen wir in diesem Beitrag.<br />

ANDROID-USER.DE JANUAR 2013 111

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!