20.01.2013 Aufrufe

Einfuehrung in die Androidprogrammierung

Einfuehrung in die Androidprogrammierung

Einfuehrung in die Androidprogrammierung

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

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

Android-ProgrammierungmitEclipse<br />

Andreas Wilhelm<br />

Institut für Informatik<br />

Georg-August-Universität Gött<strong>in</strong>gen<br />

10. Oktober 2012<br />

1/34


Inhaltsverzeichnis<br />

1 Eclipse&AndroidSDK<br />

2 Aufbaue<strong>in</strong>er Applikation<br />

3 Komponenten<strong>in</strong>Android<br />

4 Widgets<br />

5 Android4<br />

2/34


Eclipse&Android<br />

Android SDK<br />

Eclipse<br />

Das ADT Plug<strong>in</strong><br />

Der Emulator<br />

3/34


Eclipse&Android<br />

Geme<strong>in</strong>same Oberfläche für verschiedene Entwicklungstools<br />

Basis für Android-Entwicklung – Android Software Development Kit (SDK)<br />

http://developer.android.com/sdk/<br />

E<strong>in</strong>b<strong>in</strong>dung <strong>in</strong> Eclipse über das ADT-Plug<strong>in</strong><br />

http://developer.android.com/tools/sdk/eclipse-adt.html<br />

4/34


Eclipse&Android<br />

Geme<strong>in</strong>same Oberfläche für verschiedene Entwicklungstools<br />

Basis für Android-Entwicklung – Android Software Development Kit (SDK)<br />

http://developer.android.com/sdk/<br />

E<strong>in</strong>b<strong>in</strong>dung <strong>in</strong> Eclipse über das ADT-Plug<strong>in</strong><br />

http://developer.android.com/tools/sdk/eclipse-adt.html<br />

4/34


Eclipse&Android<br />

Geme<strong>in</strong>same Oberfläche für verschiedene Entwicklungstools<br />

Basis für Android-Entwicklung – Android Software Development Kit (SDK)<br />

http://developer.android.com/sdk/<br />

E<strong>in</strong>b<strong>in</strong>dung <strong>in</strong> Eclipse über das ADT-Plug<strong>in</strong><br />

http://developer.android.com/tools/sdk/eclipse-adt.html<br />

4/34


Eclipse&Android<br />

Geme<strong>in</strong>same Oberfläche für verschiedene Entwicklungstools<br />

Basis für Android-Entwicklung – Android Software Development Kit (SDK)<br />

http://developer.android.com/sdk/<br />

E<strong>in</strong>b<strong>in</strong>dung <strong>in</strong> Eclipse über das ADT-Plug<strong>in</strong><br />

http://developer.android.com/tools/sdk/eclipse-adt.html<br />

4/34


Eclipse&Android<br />

Geme<strong>in</strong>same Oberfläche für verschiedene Entwicklungstools<br />

Basis für Android-Entwicklung – Android Software Development Kit (SDK)<br />

http://developer.android.com/sdk/<br />

E<strong>in</strong>b<strong>in</strong>dung <strong>in</strong> Eclipse über das ADT-Plug<strong>in</strong><br />

http://developer.android.com/tools/sdk/eclipse-adt.html<br />

4/34


Das Android SDK<br />

Stellt Bibliotheken zur Android-Entwicklung zur Verfügung<br />

Zusätzliche Entwicklertools zum Testen & Debuggen<br />

Installer für W<strong>in</strong>dows & L<strong>in</strong>ux 32-bit verfügbar<br />

Unter L<strong>in</strong>ux 64-bit muss ia32-libs Paket <strong>in</strong>stalliert werden<br />

5/34


Das Android SDK<br />

Stellt Bibliotheken zur Android-Entwicklung zur Verfügung<br />

Zusätzliche Entwicklertools zum Testen & Debuggen<br />

Installer für W<strong>in</strong>dows & L<strong>in</strong>ux 32-bit verfügbar<br />

Unter L<strong>in</strong>ux 64-bit muss ia32-libs Paket <strong>in</strong>stalliert werden<br />

5/34


Das Android SDK<br />

Stellt Bibliotheken zur Android-Entwicklung zur Verfügung<br />

Zusätzliche Entwicklertools zum Testen & Debuggen<br />

Installer für W<strong>in</strong>dows & L<strong>in</strong>ux 32-bit verfügbar<br />

Unter L<strong>in</strong>ux 64-bit muss ia32-libs Paket <strong>in</strong>stalliert werden<br />

5/34


Das Android SDK<br />

Stellt Bibliotheken zur Android-Entwicklung zur Verfügung<br />

Zusätzliche Entwicklertools zum Testen & Debuggen<br />

Installer für W<strong>in</strong>dows & L<strong>in</strong>ux 32-bit verfügbar<br />

Unter L<strong>in</strong>ux 64-bit muss ia32-libs Paket <strong>in</strong>stalliert werden<br />

5/34


DerEmulator<br />

Simulation der Applikation unter verschiedenen Android Versionen<br />

Testen der Applikation bei verschiedenen Auflösungen<br />

Konfiguration verschiedener Geräte-Typen (Motorrola, HTC, ...)<br />

Verwalten verschiedener Konfigurationen über den<br />

Android-Virtuell-Device-(AVD)-Manager<br />

Automatisches Kompilieren, Uploaden und Starten der Applikation auf dem<br />

Emulator aus Eclipse heraus<br />

6/34


DerEmulator<br />

Simulation der Applikation unter verschiedenen Android Versionen<br />

Testen der Applikation bei verschiedenen Auflösungen<br />

Konfiguration verschiedener Geräte-Typen (Motorrola, HTC, ...)<br />

Verwalten verschiedener Konfigurationen über den<br />

Android-Virtuell-Device-(AVD)-Manager<br />

Automatisches Kompilieren, Uploaden und Starten der Applikation auf dem<br />

Emulator aus Eclipse heraus<br />

6/34


DerEmulator<br />

Simulation der Applikation unter verschiedenen Android Versionen<br />

Testen der Applikation bei verschiedenen Auflösungen<br />

Konfiguration verschiedener Geräte-Typen (Motorrola, HTC, ...)<br />

Verwalten verschiedener Konfigurationen über den<br />

Android-Virtuell-Device-(AVD)-Manager<br />

Automatisches Kompilieren, Uploaden und Starten der Applikation auf dem<br />

Emulator aus Eclipse heraus<br />

6/34


DerEmulator<br />

Simulation der Applikation unter verschiedenen Android Versionen<br />

Testen der Applikation bei verschiedenen Auflösungen<br />

Konfiguration verschiedener Geräte-Typen (Motorrola, HTC, ...)<br />

Verwalten verschiedener Konfigurationen über den<br />

Android-Virtuell-Device-(AVD)-Manager<br />

Automatisches Kompilieren, Uploaden und Starten der Applikation auf dem<br />

Emulator aus Eclipse heraus<br />

6/34


DerEmulator<br />

Simulation der Applikation unter verschiedenen Android Versionen<br />

Testen der Applikation bei verschiedenen Auflösungen<br />

Konfiguration verschiedener Geräte-Typen (Motorrola, HTC, ...)<br />

Verwalten verschiedener Konfigurationen über den<br />

Android-Virtuell-Device-(AVD)-Manager<br />

Automatisches Kompilieren, Uploaden und Starten der Applikation auf dem<br />

Emulator aus Eclipse heraus<br />

6/34


Aufbaue<strong>in</strong>erApplikation<br />

Das Manifest<br />

Resourcen<br />

Aktivitäten und Layouts<br />

7/34


Das Android Manifest<br />

Enthält grundlegende Informationen über e<strong>in</strong>e Applikation wie<br />

Name, Paketname und Version der Applikation<br />

Verwendete Komponenten (Aktivitäten, Services und Broadcast Receiver)<br />

Zugangsmöglichkeiten zu den e<strong>in</strong>zelnen Komponenten (Broadcasts, ...)<br />

Zugriffsrechte der Applikation (Internet, Anrufe, ...)<br />

Benötigte Zugriffsrechte anderer Applikationen zur Verwendung von Komponenten<br />

<strong>die</strong>ser Applikation<br />

M<strong>in</strong>imal und Maximal unterstützte API-Version<br />

Def<strong>in</strong>ition <strong>in</strong> Form e<strong>in</strong>er eXtended-Markup-Language(XML)-Datei<br />

8/34


Das Android Manifest<br />

Enthält grundlegende Informationen über e<strong>in</strong>e Applikation wie<br />

Name, Paketname und Version der Applikation<br />

Verwendete Komponenten (Aktivitäten, Services und Broadcast Receiver)<br />

Zugangsmöglichkeiten zu den e<strong>in</strong>zelnen Komponenten (Broadcasts, ...)<br />

Zugriffsrechte der Applikation (Internet, Anrufe, ...)<br />

Benötigte Zugriffsrechte anderer Applikationen zur Verwendung von Komponenten<br />

<strong>die</strong>ser Applikation<br />

M<strong>in</strong>imal und Maximal unterstützte API-Version<br />

Def<strong>in</strong>ition <strong>in</strong> Form e<strong>in</strong>er eXtended-Markup-Language(XML)-Datei<br />

8/34


Das Android Manifest<br />

Enthält grundlegende Informationen über e<strong>in</strong>e Applikation wie<br />

Name, Paketname und Version der Applikation<br />

Verwendete Komponenten (Aktivitäten, Services und Broadcast Receiver)<br />

Zugangsmöglichkeiten zu den e<strong>in</strong>zelnen Komponenten (Broadcasts, ...)<br />

Zugriffsrechte der Applikation (Internet, Anrufe, ...)<br />

Benötigte Zugriffsrechte anderer Applikationen zur Verwendung von Komponenten<br />

<strong>die</strong>ser Applikation<br />

M<strong>in</strong>imal und Maximal unterstützte API-Version<br />

Def<strong>in</strong>ition <strong>in</strong> Form e<strong>in</strong>er eXtended-Markup-Language(XML)-Datei<br />

8/34


Das Android Manifest<br />

Enthält grundlegende Informationen über e<strong>in</strong>e Applikation wie<br />

Name, Paketname und Version der Applikation<br />

Verwendete Komponenten (Aktivitäten, Services und Broadcast Receiver)<br />

Zugangsmöglichkeiten zu den e<strong>in</strong>zelnen Komponenten (Broadcasts, ...)<br />

Zugriffsrechte der Applikation (Internet, Anrufe, ...)<br />

Benötigte Zugriffsrechte anderer Applikationen zur Verwendung von Komponenten<br />

<strong>die</strong>ser Applikation<br />

M<strong>in</strong>imal und Maximal unterstützte API-Version<br />

Def<strong>in</strong>ition <strong>in</strong> Form e<strong>in</strong>er eXtended-Markup-Language(XML)-Datei<br />

8/34


Das Android Manifest<br />

Enthält grundlegende Informationen über e<strong>in</strong>e Applikation wie<br />

Name, Paketname und Version der Applikation<br />

Verwendete Komponenten (Aktivitäten, Services und Broadcast Receiver)<br />

Zugangsmöglichkeiten zu den e<strong>in</strong>zelnen Komponenten (Broadcasts, ...)<br />

Zugriffsrechte der Applikation (Internet, Anrufe, ...)<br />

Benötigte Zugriffsrechte anderer Applikationen zur Verwendung von Komponenten<br />

<strong>die</strong>ser Applikation<br />

M<strong>in</strong>imal und Maximal unterstützte API-Version<br />

Def<strong>in</strong>ition <strong>in</strong> Form e<strong>in</strong>er eXtended-Markup-Language(XML)-Datei<br />

8/34


Das Android Manifest<br />

Enthält grundlegende Informationen über e<strong>in</strong>e Applikation wie<br />

Name, Paketname und Version der Applikation<br />

Verwendete Komponenten (Aktivitäten, Services und Broadcast Receiver)<br />

Zugangsmöglichkeiten zu den e<strong>in</strong>zelnen Komponenten (Broadcasts, ...)<br />

Zugriffsrechte der Applikation (Internet, Anrufe, ...)<br />

Benötigte Zugriffsrechte anderer Applikationen zur Verwendung von Komponenten<br />

<strong>die</strong>ser Applikation<br />

M<strong>in</strong>imal und Maximal unterstützte API-Version<br />

Def<strong>in</strong>ition <strong>in</strong> Form e<strong>in</strong>er eXtended-Markup-Language(XML)-Datei<br />

8/34


Das Android Manifest<br />

Enthält grundlegende Informationen über e<strong>in</strong>e Applikation wie<br />

Name, Paketname und Version der Applikation<br />

Verwendete Komponenten (Aktivitäten, Services und Broadcast Receiver)<br />

Zugangsmöglichkeiten zu den e<strong>in</strong>zelnen Komponenten (Broadcasts, ...)<br />

Zugriffsrechte der Applikation (Internet, Anrufe, ...)<br />

Benötigte Zugriffsrechte anderer Applikationen zur Verwendung von Komponenten<br />

<strong>die</strong>ser Applikation<br />

M<strong>in</strong>imal und Maximal unterstützte API-Version<br />

Def<strong>in</strong>ition <strong>in</strong> Form e<strong>in</strong>er eXtended-Markup-Language(XML)-Datei<br />

8/34


Das Android Manifest<br />

Beispielstrukture<strong>in</strong>er Manifest-Datei<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

...<br />

<br />

<br />

<br />

...<br />

<br />

<br />

<br />

...<br />

<br />

<br />

<br />

<br />

9/34


Ressourcenverwaltung<br />

Trennung von Quellcode und Resourcen (Bildern, Zeichenketten, Layouts)<br />

Eröffnet Möglichkeit verschiedenste Geräte zu unterstützen<br />

Verwaltung der Resourcen <strong>in</strong> Verzeichnisstruktur unter res<br />

Feste Konventionen zur E<strong>in</strong>sortierung von Resourcen (Beispiel:<br />

res/values/str<strong>in</strong>gs.xml und res/values-de/str<strong>in</strong>gs.xml)<br />

Zugriff auf Resourcen aus dem Quellcode über automatisch generierte Klasse R<br />

Referenzierung der Resourcen über IDs (Beispiel: R.str<strong>in</strong>g.btnOk)<br />

10/34


Ressourcenverwaltung<br />

Trennung von Quellcode und Resourcen (Bildern, Zeichenketten, Layouts)<br />

Eröffnet Möglichkeit verschiedenste Geräte zu unterstützen<br />

Verwaltung der Resourcen <strong>in</strong> Verzeichnisstruktur unter res<br />

Feste Konventionen zur E<strong>in</strong>sortierung von Resourcen (Beispiel:<br />

res/values/str<strong>in</strong>gs.xml und res/values-de/str<strong>in</strong>gs.xml)<br />

Zugriff auf Resourcen aus dem Quellcode über automatisch generierte Klasse R<br />

Referenzierung der Resourcen über IDs (Beispiel: R.str<strong>in</strong>g.btnOk)<br />

10/34


Ressourcenverwaltung<br />

Trennung von Quellcode und Resourcen (Bildern, Zeichenketten, Layouts)<br />

Eröffnet Möglichkeit verschiedenste Geräte zu unterstützen<br />

Verwaltung der Resourcen <strong>in</strong> Verzeichnisstruktur unter res<br />

Feste Konventionen zur E<strong>in</strong>sortierung von Resourcen (Beispiel:<br />

res/values/str<strong>in</strong>gs.xml und res/values-de/str<strong>in</strong>gs.xml)<br />

Zugriff auf Resourcen aus dem Quellcode über automatisch generierte Klasse R<br />

Referenzierung der Resourcen über IDs (Beispiel: R.str<strong>in</strong>g.btnOk)<br />

10/34


Ressourcenverwaltung<br />

Trennung von Quellcode und Resourcen (Bildern, Zeichenketten, Layouts)<br />

Eröffnet Möglichkeit verschiedenste Geräte zu unterstützen<br />

Verwaltung der Resourcen <strong>in</strong> Verzeichnisstruktur unter res<br />

Feste Konventionen zur E<strong>in</strong>sortierung von Resourcen (Beispiel:<br />

res/values/str<strong>in</strong>gs.xml und res/values-de/str<strong>in</strong>gs.xml)<br />

Zugriff auf Resourcen aus dem Quellcode über automatisch generierte Klasse R<br />

Referenzierung der Resourcen über IDs (Beispiel: R.str<strong>in</strong>g.btnOk)<br />

10/34


Ressourcenverwaltung<br />

Trennung von Quellcode und Resourcen (Bildern, Zeichenketten, Layouts)<br />

Eröffnet Möglichkeit verschiedenste Geräte zu unterstützen<br />

Verwaltung der Resourcen <strong>in</strong> Verzeichnisstruktur unter res<br />

Feste Konventionen zur E<strong>in</strong>sortierung von Resourcen (Beispiel:<br />

res/values/str<strong>in</strong>gs.xml und res/values-de/str<strong>in</strong>gs.xml)<br />

Zugriff auf Resourcen aus dem Quellcode über automatisch generierte Klasse R<br />

Referenzierung der Resourcen über IDs (Beispiel: R.str<strong>in</strong>g.btnOk)<br />

10/34


Ressourcenverwaltung<br />

Trennung von Quellcode und Resourcen (Bildern, Zeichenketten, Layouts)<br />

Eröffnet Möglichkeit verschiedenste Geräte zu unterstützen<br />

Verwaltung der Resourcen <strong>in</strong> Verzeichnisstruktur unter res<br />

Feste Konventionen zur E<strong>in</strong>sortierung von Resourcen (Beispiel:<br />

res/values/str<strong>in</strong>gs.xml und res/values-de/str<strong>in</strong>gs.xml)<br />

Zugriff auf Resourcen aus dem Quellcode über automatisch generierte Klasse R<br />

Referenzierung der Resourcen über IDs (Beispiel: R.str<strong>in</strong>g.btnOk)<br />

10/34


Ressourcenverwaltung<br />

Trennung von Quellcode und Resourcen (Bildern, Zeichenketten, Layouts)<br />

Eröffnet Möglichkeit verschiedenste Geräte zu unterstützen<br />

Verwaltung der Resourcen <strong>in</strong> Verzeichnisstruktur unter res<br />

Feste Konventionen zur E<strong>in</strong>sortierung von Resourcen (Beispiel:<br />

res/values/str<strong>in</strong>gs.xml und res/values-de/str<strong>in</strong>gs.xml)<br />

Zugriff auf Resourcen aus dem Quellcode über automatisch generierte Klasse R<br />

Referenzierung der Resourcen über IDs (Beispiel: R.str<strong>in</strong>g.btnOk)<br />

Str<strong>in</strong>g Resourcen<br />

<br />

TaskIt<br />

Hello world!<br />

...<br />

<br />

10/34


Ressourcenverwaltung<br />

Trennung von Quellcode und Resourcen (Bildern, Zeichenketten, Layouts)<br />

Eröffnet Möglichkeit verschiedenste Geräte zu unterstützen<br />

Verwaltung der Resourcen <strong>in</strong> Verzeichnisstruktur unter res<br />

Feste Konventionen zur E<strong>in</strong>sortierung von Resourcen (Beispiel:<br />

res/values/str<strong>in</strong>gs.xml und res/values-de/str<strong>in</strong>gs.xml)<br />

Zugriff auf Resourcen aus dem Quellcode über automatisch generierte Klasse R<br />

Referenzierung der Resourcen über IDs (Beispiel: R.str<strong>in</strong>g.btnOk)<br />

Str<strong>in</strong>g Resourcen<br />

<br />

TaskIt<br />

Hello world!<br />

...<br />

<br />

FarbResourcen<br />

<br />

<br />

#ffffff<br />

#000000<br />

...<br />

<br />

10/34


Ressourcenverwaltung<br />

ZugriffaufResourcen<br />

public void onCreate(Bundle savedInstanceState) {<br />

// Call the parent method ...<br />

super.onCreate(savedInstanceState);<br />

// ... and set the content view.<br />

this.setContentView(R.layout.ma<strong>in</strong>);<br />

// Access the text view ...<br />

TextView mo<strong>in</strong> = (TextView) this.f<strong>in</strong>dViewById(R.id.helloTxt);<br />

// ... and change the label.<br />

mo<strong>in</strong>.setText(R.str<strong>in</strong>g.hello_world);<br />

}<br />

11/34


Komponenten<strong>in</strong>Android<br />

Activities<br />

Views und View-Groups<br />

Intents<br />

◮ Explizite Intents<br />

◮ Implizite Intents<br />

◮ Ergebnisse von Intents<br />

◮ Intent-Filter<br />

Services<br />

Content-Provider<br />

Broadcast-Receiver<br />

12/34


Aktivities<br />

Aktivitäten (Activities) bilden <strong>die</strong> Präsentationsschicht e<strong>in</strong>er Applikation<br />

E<strong>in</strong>e Applikation kann aus mehreren Aktivitäten (Dialoge oder Seiten) bestehen<br />

Zuweisung der grafischen Oberfläche mittels der Methode setContentView(View)<br />

Implementierung e<strong>in</strong>er Aktivität durch Ableitung e<strong>in</strong>er K<strong>in</strong>dklasse von Activity<br />

Wichtig: Überschreiben der Methode onCreate(Bundle)<br />

13/34


Aktivities<br />

Aktivitäten (Activities) bilden <strong>die</strong> Präsentationsschicht e<strong>in</strong>er Applikation<br />

E<strong>in</strong>e Applikation kann aus mehreren Aktivitäten (Dialoge oder Seiten) bestehen<br />

Zuweisung der grafischen Oberfläche mittels der Methode setContentView(View)<br />

Implementierung e<strong>in</strong>er Aktivität durch Ableitung e<strong>in</strong>er K<strong>in</strong>dklasse von Activity<br />

Wichtig: Überschreiben der Methode onCreate(Bundle)<br />

13/34


Aktivities<br />

Aktivitäten (Activities) bilden <strong>die</strong> Präsentationsschicht e<strong>in</strong>er Applikation<br />

E<strong>in</strong>e Applikation kann aus mehreren Aktivitäten (Dialoge oder Seiten) bestehen<br />

Zuweisung der grafischen Oberfläche mittels der Methode setContentView(View)<br />

Implementierung e<strong>in</strong>er Aktivität durch Ableitung e<strong>in</strong>er K<strong>in</strong>dklasse von Activity<br />

Wichtig: Überschreiben der Methode onCreate(Bundle)<br />

13/34


Aktivities<br />

Aktivitäten (Activities) bilden <strong>die</strong> Präsentationsschicht e<strong>in</strong>er Applikation<br />

E<strong>in</strong>e Applikation kann aus mehreren Aktivitäten (Dialoge oder Seiten) bestehen<br />

Zuweisung der grafischen Oberfläche mittels der Methode setContentView(View)<br />

Implementierung e<strong>in</strong>er Aktivität durch Ableitung e<strong>in</strong>er K<strong>in</strong>dklasse von Activity<br />

Wichtig: Überschreiben der Methode onCreate(Bundle)<br />

13/34


Aktivities<br />

Aktivitäten (Activities) bilden <strong>die</strong> Präsentationsschicht e<strong>in</strong>er Applikation<br />

E<strong>in</strong>e Applikation kann aus mehreren Aktivitäten (Dialoge oder Seiten) bestehen<br />

Zuweisung der grafischen Oberfläche mittels der Methode setContentView(View)<br />

Implementierung e<strong>in</strong>er Aktivität durch Ableitung e<strong>in</strong>er K<strong>in</strong>dklasse von Activity<br />

Wichtig: Überschreiben der Methode onCreate(Bundle)<br />

13/34


Aktivities<br />

Aktivitäten (Activities) bilden <strong>die</strong> Präsentationsschicht e<strong>in</strong>er Applikation<br />

E<strong>in</strong>e Applikation kann aus mehreren Aktivitäten (Dialoge oder Seiten) bestehen<br />

Zuweisung der grafischen Oberfläche mittels der Methode setContentView(View)<br />

Implementierung e<strong>in</strong>er Aktivität durch Ableitung e<strong>in</strong>er K<strong>in</strong>dklasse von Activity<br />

Wichtig: Überschreiben der Methode onCreate(Bundle)<br />

Basisimplementatione<strong>in</strong>er Aktivität<br />

public class TodoActivity extends Activity {<br />

protected void onCreate(Bundle savedInstanceState) {<br />

// Call the parent method ...<br />

super.onCreate(savedInstanceState);<br />

// ... and set the content view.<br />

this.setContentView(R.layout.ma<strong>in</strong>);<br />

}<br />

...<br />

}<br />

13/34


Aktivities<br />

Es gibt weitere Methoden wie beispielsweise onPause(), <strong>die</strong> vom System aufgerufen<br />

werden, um auf Status-Änderungen reagieren zu können. Man spricht <strong>in</strong> <strong>die</strong>sem<br />

Zusammenhang vom Activity Lifecycle.<br />

Runn<strong>in</strong>g Aktuell im Vordergrund bef<strong>in</strong>dliche Aktivität<br />

Paused Sichtbare, aber nicht mehr im Fokus bef<strong>in</strong>dliche Aktivitäten – Aktivität<br />

bleibt aktiv und der W<strong>in</strong>dowManager hat weiterh<strong>in</strong> Zugriff – Aktivität<br />

kann trotzdem bei Resourcenmangel vom System beendet werden<br />

Stopped Nicht sichtbare Aktivitäten – alle E<strong>in</strong>stellungen und Zustände<br />

gespeichert – werden dennoch häufig vom System beendet<br />

F<strong>in</strong>ished Vom System beendete Aktivitäten – müssen neu gestartet werden und<br />

<strong>die</strong> E<strong>in</strong>stellungen der letzten Sitzung neu geladen werden, falls sie<br />

erneut den Fokus bekommen<br />

14/34


Aktivities<br />

Es gibt weitere Methoden wie beispielsweise onPause(), <strong>die</strong> vom System aufgerufen<br />

werden, um auf Status-Änderungen reagieren zu können. Man spricht <strong>in</strong> <strong>die</strong>sem<br />

Zusammenhang vom Activity Lifecycle.<br />

Aus der Stack basierten Struktur des Systems ergeben sich folgende Zustände für<br />

e<strong>in</strong>e Aktivität:<br />

Runn<strong>in</strong>g Aktuell im Vordergrund bef<strong>in</strong>dliche Aktivität<br />

Paused Sichtbare, aber nicht mehr im Fokus bef<strong>in</strong>dliche Aktivitäten – Aktivität<br />

bleibt aktiv und der W<strong>in</strong>dowManager hat weiterh<strong>in</strong> Zugriff – Aktivität<br />

kann trotzdem bei Resourcenmangel vom System beendet werden<br />

Stopped Nicht sichtbare Aktivitäten – alle E<strong>in</strong>stellungen und Zustände<br />

gespeichert – werden dennoch häufig vom System beendet<br />

F<strong>in</strong>ished Vom System beendete Aktivitäten – müssen neu gestartet werden und<br />

<strong>die</strong> E<strong>in</strong>stellungen der letzten Sitzung neu geladen werden, falls sie<br />

erneut den Fokus bekommen<br />

14/34


Aktivities<br />

Es gibt weitere Methoden wie beispielsweise onPause(), <strong>die</strong> vom System aufgerufen<br />

werden, um auf Status-Änderungen reagieren zu können. Man spricht <strong>in</strong> <strong>die</strong>sem<br />

Zusammenhang vom Activity Lifecycle.<br />

Aus der Stack basierten Struktur des Systems ergeben sich folgende Zustände für<br />

e<strong>in</strong>e Aktivität:<br />

Runn<strong>in</strong>g Aktuell im Vordergrund bef<strong>in</strong>dliche Aktivität<br />

Paused Sichtbare, aber nicht mehr im Fokus bef<strong>in</strong>dliche Aktivitäten – Aktivität<br />

bleibt aktiv und der W<strong>in</strong>dowManager hat weiterh<strong>in</strong> Zugriff – Aktivität<br />

kann trotzdem bei Resourcenmangel vom System beendet werden<br />

Stopped Nicht sichtbare Aktivitäten – alle E<strong>in</strong>stellungen und Zustände<br />

gespeichert – werden dennoch häufig vom System beendet<br />

F<strong>in</strong>ished Vom System beendete Aktivitäten – müssen neu gestartet werden und<br />

<strong>die</strong> E<strong>in</strong>stellungen der letzten Sitzung neu geladen werden, falls sie<br />

erneut den Fokus bekommen<br />

14/34


Aktivities<br />

Es gibt weitere Methoden wie beispielsweise onPause(), <strong>die</strong> vom System aufgerufen<br />

werden, um auf Status-Änderungen reagieren zu können. Man spricht <strong>in</strong> <strong>die</strong>sem<br />

Zusammenhang vom Activity Lifecycle.<br />

Aus der Stack basierten Struktur des Systems ergeben sich folgende Zustände für<br />

e<strong>in</strong>e Aktivität:<br />

Runn<strong>in</strong>g Aktuell im Vordergrund bef<strong>in</strong>dliche Aktivität<br />

Paused Sichtbare, aber nicht mehr im Fokus bef<strong>in</strong>dliche Aktivitäten – Aktivität<br />

bleibt aktiv und der W<strong>in</strong>dowManager hat weiterh<strong>in</strong> Zugriff – Aktivität<br />

kann trotzdem bei Resourcenmangel vom System beendet werden<br />

Stopped Nicht sichtbare Aktivitäten – alle E<strong>in</strong>stellungen und Zustände<br />

gespeichert – werden dennoch häufig vom System beendet<br />

F<strong>in</strong>ished Vom System beendete Aktivitäten – müssen neu gestartet werden und<br />

<strong>die</strong> E<strong>in</strong>stellungen der letzten Sitzung neu geladen werden, falls sie<br />

erneut den Fokus bekommen<br />

14/34


Aktivities<br />

Es gibt weitere Methoden wie beispielsweise onPause(), <strong>die</strong> vom System aufgerufen<br />

werden, um auf Status-Änderungen reagieren zu können. Man spricht <strong>in</strong> <strong>die</strong>sem<br />

Zusammenhang vom Activity Lifecycle.<br />

Aus der Stack basierten Struktur des Systems ergeben sich folgende Zustände für<br />

e<strong>in</strong>e Aktivität:<br />

Runn<strong>in</strong>g Aktuell im Vordergrund bef<strong>in</strong>dliche Aktivität<br />

Paused Sichtbare, aber nicht mehr im Fokus bef<strong>in</strong>dliche Aktivitäten – Aktivität<br />

bleibt aktiv und der W<strong>in</strong>dowManager hat weiterh<strong>in</strong> Zugriff – Aktivität<br />

kann trotzdem bei Resourcenmangel vom System beendet werden<br />

Stopped Nicht sichtbare Aktivitäten – alle E<strong>in</strong>stellungen und Zustände<br />

gespeichert – werden dennoch häufig vom System beendet<br />

F<strong>in</strong>ished Vom System beendete Aktivitäten – müssen neu gestartet werden und<br />

<strong>die</strong> E<strong>in</strong>stellungen der letzten Sitzung neu geladen werden, falls sie<br />

erneut den Fokus bekommen<br />

14/34


Aktivities<br />

Es gibt weitere Methoden wie beispielsweise onPause(), <strong>die</strong> vom System aufgerufen<br />

werden, um auf Status-Änderungen reagieren zu können. Man spricht <strong>in</strong> <strong>die</strong>sem<br />

Zusammenhang vom Activity Lifecycle.<br />

Aus der Stack basierten Struktur des Systems ergeben sich folgende Zustände für<br />

e<strong>in</strong>e Aktivität:<br />

Runn<strong>in</strong>g Aktuell im Vordergrund bef<strong>in</strong>dliche Aktivität<br />

Paused Sichtbare, aber nicht mehr im Fokus bef<strong>in</strong>dliche Aktivitäten – Aktivität<br />

bleibt aktiv und der W<strong>in</strong>dowManager hat weiterh<strong>in</strong> Zugriff – Aktivität<br />

kann trotzdem bei Resourcenmangel vom System beendet werden<br />

Stopped Nicht sichtbare Aktivitäten – alle E<strong>in</strong>stellungen und Zustände<br />

gespeichert – werden dennoch häufig vom System beendet<br />

F<strong>in</strong>ished Vom System beendete Aktivitäten – müssen neu gestartet werden und<br />

<strong>die</strong> E<strong>in</strong>stellungen der letzten Sitzung neu geladen werden, falls sie<br />

erneut den Fokus bekommen<br />

14/34


Aktivities<br />

Abbildung: Der Aktivity Lifecycle (Quelle: http://developer.android.com)<br />

15/34


Viewsund View-Groups<br />

Teile von Benutzeroberflächen, wie beispielsweise Buttons, Auswahl- oder<br />

Texte<strong>in</strong>gabefelder<br />

Def<strong>in</strong>ition <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

Aussehen und Verhalten von Views kann über ihre Attribute verändert werden<br />

ViewGroups (auch LayoutManager) <strong>die</strong>nen zur Strukturierung und Anordung von<br />

Views<br />

E<strong>in</strong>e beliebige Verschachtelung von ViewGroups ist möglich<br />

16/34


Viewsund View-Groups<br />

Teile von Benutzeroberflächen, wie beispielsweise Buttons, Auswahl- oder<br />

Texte<strong>in</strong>gabefelder<br />

Def<strong>in</strong>ition <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

Aussehen und Verhalten von Views kann über ihre Attribute verändert werden<br />

ViewGroups (auch LayoutManager) <strong>die</strong>nen zur Strukturierung und Anordung von<br />

Views<br />

E<strong>in</strong>e beliebige Verschachtelung von ViewGroups ist möglich<br />

16/34


Viewsund View-Groups<br />

Teile von Benutzeroberflächen, wie beispielsweise Buttons, Auswahl- oder<br />

Texte<strong>in</strong>gabefelder<br />

Def<strong>in</strong>ition <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

Aussehen und Verhalten von Views kann über ihre Attribute verändert werden<br />

ViewGroups (auch LayoutManager) <strong>die</strong>nen zur Strukturierung und Anordung von<br />

Views<br />

E<strong>in</strong>e beliebige Verschachtelung von ViewGroups ist möglich<br />

16/34


Viewsund View-Groups<br />

Teile von Benutzeroberflächen, wie beispielsweise Buttons, Auswahl- oder<br />

Texte<strong>in</strong>gabefelder<br />

Def<strong>in</strong>ition <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

Aussehen und Verhalten von Views kann über ihre Attribute verändert werden<br />

ViewGroups (auch LayoutManager) <strong>die</strong>nen zur Strukturierung und Anordung von<br />

Views<br />

E<strong>in</strong>e beliebige Verschachtelung von ViewGroups ist möglich<br />

16/34


Viewsund View-Groups<br />

Teile von Benutzeroberflächen, wie beispielsweise Buttons, Auswahl- oder<br />

Texte<strong>in</strong>gabefelder<br />

Def<strong>in</strong>ition <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

Aussehen und Verhalten von Views kann über ihre Attribute verändert werden<br />

ViewGroups (auch LayoutManager) <strong>die</strong>nen zur Strukturierung und Anordung von<br />

Views<br />

E<strong>in</strong>e beliebige Verschachtelung von ViewGroups ist möglich<br />

16/34


Viewsund View-Groups<br />

Teile von Benutzeroberflächen, wie beispielsweise Buttons, Auswahl- oder<br />

Texte<strong>in</strong>gabefelder<br />

Def<strong>in</strong>ition <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

Aussehen und Verhalten von Views kann über ihre Attribute verändert werden<br />

ViewGroups (auch LayoutManager) <strong>die</strong>nen zur Strukturierung und Anordung von<br />

Views<br />

E<strong>in</strong>e beliebige Verschachtelung von ViewGroups ist möglich<br />

E<strong>in</strong>e<strong>in</strong>faches Layout<br />

<br />

<br />

<br />

<br />

16/34


Viewsund View-Groups<br />

Zugriff auf Views und ViewGroups aus dem Quellcode heraus über f<strong>in</strong>dViewById()<br />

Laden e<strong>in</strong>es Layouts ohne Verwendung von setContentView() mit LayoutInflater<br />

17/34


Viewsund View-Groups<br />

Zugriff auf Views und ViewGroups aus dem Quellcode heraus über f<strong>in</strong>dViewById()<br />

Laden e<strong>in</strong>es Layouts ohne Verwendung von setContentView() mit LayoutInflater<br />

17/34


Viewsund View-Groups<br />

Zugriff auf Views und ViewGroups aus dem Quellcode heraus über f<strong>in</strong>dViewById()<br />

Laden e<strong>in</strong>es Layouts ohne Verwendung von setContentView() mit LayoutInflater<br />

ZugriffaufdasLayout<br />

// Fetch the layout <strong>in</strong>flater ...<br />

this.<strong>in</strong>flater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);<br />

// ... and <strong>in</strong>flate the layout.<br />

View ma<strong>in</strong> = this.<strong>in</strong>flater.<strong>in</strong>flate(R.layout.row_layout, null);<br />

// Load the ImageView and assign the icon.<br />

ImageView icon = (ImageView) ma<strong>in</strong>.f<strong>in</strong>dViewById(R.id.icon);<br />

icon.setImageResource(R.drawable.my_icon);<br />

// Load the TextView and assign the content.<br />

TextView subject = (TextView) ma<strong>in</strong>.f<strong>in</strong>dViewById(R.id.subject);<br />

subject.setText("Hello Bob");<br />

17/34


Intents<br />

Nachrichten zur Kommunikation <strong>in</strong>nerhalb des Systems<br />

Aufruf von Funktionalitäten des Systems<br />

Übertragung von Daten zwischen verschiedenen Komponenten<br />

Methoden startActivity und startService, sowie sendBroadcast nutzen Intents<br />

Unterscheidung zwischen expliziten und impliziten Intents<br />

18/34


Intents<br />

Nachrichten zur Kommunikation <strong>in</strong>nerhalb des Systems<br />

Aufruf von Funktionalitäten des Systems<br />

Übertragung von Daten zwischen verschiedenen Komponenten<br />

Methoden startActivity und startService, sowie sendBroadcast nutzen Intents<br />

Unterscheidung zwischen expliziten und impliziten Intents<br />

18/34


Intents<br />

Nachrichten zur Kommunikation <strong>in</strong>nerhalb des Systems<br />

Aufruf von Funktionalitäten des Systems<br />

Übertragung von Daten zwischen verschiedenen Komponenten<br />

Methoden startActivity und startService, sowie sendBroadcast nutzen Intents<br />

Unterscheidung zwischen expliziten und impliziten Intents<br />

18/34


Intents<br />

Nachrichten zur Kommunikation <strong>in</strong>nerhalb des Systems<br />

Aufruf von Funktionalitäten des Systems<br />

Übertragung von Daten zwischen verschiedenen Komponenten<br />

Methoden startActivity und startService, sowie sendBroadcast nutzen Intents<br />

Unterscheidung zwischen expliziten und impliziten Intents<br />

18/34


Intents<br />

Nachrichten zur Kommunikation <strong>in</strong>nerhalb des Systems<br />

Aufruf von Funktionalitäten des Systems<br />

Übertragung von Daten zwischen verschiedenen Komponenten<br />

Methoden startActivity und startService, sowie sendBroadcast nutzen Intents<br />

Unterscheidung zwischen expliziten und impliziten Intents<br />

18/34


ExpliziteIntents<br />

Der Empfänger der Nachricht wird explizit angegeben.<br />

19/34


ExpliziteIntents<br />

Der Empfänger der Nachricht wird explizit angegeben.<br />

Startene<strong>in</strong>er Aktivität<br />

Intent i = new Intent(this, TodoActivity.class);<br />

i.putExtra(TodoActivity.TODO_ID, 13);<br />

startActivity(i);<br />

19/34


ExpliziteIntents<br />

Der Empfänger der Nachricht wird explizit angegeben.<br />

Startene<strong>in</strong>er Aktivität<br />

Intent i = new Intent(this, TodoActivity.class);<br />

i.putExtra(TodoActivity.TODO_ID, 13);<br />

startActivity(i);<br />

Die so übertragenden Daten können <strong>in</strong> der onCreate() Methode extrahiert und<br />

verarbeitet werden.<br />

19/34


ExpliziteIntents<br />

Der Empfänger der Nachricht wird explizit angegeben.<br />

Startene<strong>in</strong>er Aktivität<br />

Intent i = new Intent(this, TodoActivity.class);<br />

i.putExtra(TodoActivity.TODO_ID, 13);<br />

startActivity(i);<br />

Die so übertragenden Daten können <strong>in</strong> der onCreate() Methode extrahiert und<br />

verarbeitet werden.<br />

Extrahierender Daten<br />

protected void onCreate(Bundle savedInstanceState) {<br />

// Fetch the <strong>in</strong>tent bundle, ...<br />

Bundle bundle = this.getIntent().getExtras();<br />

// ... <strong>in</strong>itialize the todo id ...<br />

long todoId = Todo.PLACEHOLDER_ID;<br />

// ... and try to fetch it.<br />

if(bundle != null) {<br />

todoId = bundle.getLong(TodoActivity.TODO_ID, Todo.PLACEHOLDER_ID);<br />

}<br />

}<br />

19/34


ImpliziteIntents<br />

Anders als bei expliziten Intents, wird bei der Verwendung impliziter Intents nicht<br />

spezifiziert welche Komponente verwendet werden soll.<br />

System kann dir richtige Komponente für <strong>die</strong> gegebene Aktion auswählen<br />

Man kann dem Benutzer <strong>die</strong> Möglichkeit geben e<strong>in</strong>e andere Applikation zu nutzen<br />

Es kann auf andere Applikationen zurückgegriffen werden ohne <strong>die</strong> benötigte<br />

Funktionalität selbst zu implementieren<br />

20/34


ImpliziteIntents<br />

Anders als bei expliziten Intents, wird bei der Verwendung impliziter Intents nicht<br />

spezifiziert welche Komponente verwendet werden soll.<br />

AuswahlderKomponente<br />

Intent smsIntent = new Intent(Intent.ACTION_VIEW);<br />

smsIntent.setType("vnd.android-dir/mms-sms");<br />

smsIntent.putExtra("sms_body", "Hello there! This is one way to send an sms.");<br />

startActivity(Intent.createChooser(smsIntent, "Send an SMS");<br />

System kann dir richtige Komponente für <strong>die</strong> gegebene Aktion auswählen<br />

Man kann dem Benutzer <strong>die</strong> Möglichkeit geben e<strong>in</strong>e andere Applikation zu nutzen<br />

Es kann auf andere Applikationen zurückgegriffen werden ohne <strong>die</strong> benötigte<br />

Funktionalität selbst zu implementieren<br />

20/34


ImpliziteIntents<br />

Anders als bei expliziten Intents, wird bei der Verwendung impliziter Intents nicht<br />

spezifiziert welche Komponente verwendet werden soll.<br />

AuswahlderKomponente<br />

Intent smsIntent = new Intent(Intent.ACTION_VIEW);<br />

smsIntent.setType("vnd.android-dir/mms-sms");<br />

smsIntent.putExtra("sms_body", "Hello there! This is one way to send an sms.");<br />

startActivity(Intent.createChooser(smsIntent, "Send an SMS");<br />

System kann dir richtige Komponente für <strong>die</strong> gegebene Aktion auswählen<br />

Man kann dem Benutzer <strong>die</strong> Möglichkeit geben e<strong>in</strong>e andere Applikation zu nutzen<br />

Es kann auf andere Applikationen zurückgegriffen werden ohne <strong>die</strong> benötigte<br />

Funktionalität selbst zu implementieren<br />

20/34


ImpliziteIntents<br />

Anders als bei expliziten Intents, wird bei der Verwendung impliziter Intents nicht<br />

spezifiziert welche Komponente verwendet werden soll.<br />

AuswahlderKomponente<br />

Intent smsIntent = new Intent(Intent.ACTION_VIEW);<br />

smsIntent.setType("vnd.android-dir/mms-sms");<br />

smsIntent.putExtra("sms_body", "Hello there! This is one way to send an sms.");<br />

startActivity(Intent.createChooser(smsIntent, "Send an SMS");<br />

System kann dir richtige Komponente für <strong>die</strong> gegebene Aktion auswählen<br />

Man kann dem Benutzer <strong>die</strong> Möglichkeit geben e<strong>in</strong>e andere Applikation zu nutzen<br />

Es kann auf andere Applikationen zurückgegriffen werden ohne <strong>die</strong> benötigte<br />

Funktionalität selbst zu implementieren<br />

20/34


ImpliziteIntents<br />

Anders als bei expliziten Intents, wird bei der Verwendung impliziter Intents nicht<br />

spezifiziert welche Komponente verwendet werden soll.<br />

AuswahlderKomponente<br />

Intent smsIntent = new Intent(Intent.ACTION_VIEW);<br />

smsIntent.setType("vnd.android-dir/mms-sms");<br />

smsIntent.putExtra("sms_body", "Hello there! This is one way to send an sms.");<br />

startActivity(Intent.createChooser(smsIntent, "Send an SMS");<br />

System kann dir richtige Komponente für <strong>die</strong> gegebene Aktion auswählen<br />

Man kann dem Benutzer <strong>die</strong> Möglichkeit geben e<strong>in</strong>e andere Applikation zu nutzen<br />

Es kann auf andere Applikationen zurückgegriffen werden ohne <strong>die</strong> benötigte<br />

Funktionalität selbst zu implementieren<br />

20/34


Ergebnissevon Intents<br />

21/34


Ergebnissevon Intents<br />

Startender Aktivität<br />

public class TodoList extends ListActivity {<br />

...<br />

@Override<br />

protected void onListItemClick(ListView l, View v, <strong>in</strong>t position, long id) {<br />

Intent i = new Intent(this, TodoActivity.class);<br />

i.putExtra(TodoActivity.TODO_ID, todo.getId());<br />

i.putExtra(TodoActivity.TODO_ACTION, TodoActivity.TODO_VIEW);<br />

startActivityForResult(i, TODO_VIEW_REQUEST);<br />

}<br />

}<br />

21/34


Ergebnissevon Intents<br />

Startender Aktivität<br />

public class TodoList extends ListActivity {<br />

...<br />

@Override<br />

protected void onListItemClick(ListView l, View v, <strong>in</strong>t position, long id) {<br />

Intent i = new Intent(this, TodoActivity.class);<br />

i.putExtra(TodoActivity.TODO_ID, todo.getId());<br />

i.putExtra(TodoActivity.TODO_ACTION, TodoActivity.TODO_VIEW);<br />

startActivityForResult(i, TODO_VIEW_REQUEST);<br />

}<br />

}<br />

Ergebnissesenden<br />

public class TodoActivity extends Activity {<br />

...<br />

@Override<br />

public void f<strong>in</strong>ish() {<br />

Intent result = new Intent();<br />

result.putExtra(TodoActivity.TODO_ID, todo.getId());<br />

setResult(RESULT_OK, result);<br />

super.f<strong>in</strong>ish();<br />

}<br />

}<br />

21/34


Ergebnissevon Intents<br />

Ergebnisseempfangen<br />

public class TodoList extends ListActivity {<br />

...<br />

@Override<br />

protected void onActivityResult(<strong>in</strong>t requestCode, <strong>in</strong>t resultCode, Intent data) {<br />

if (resultCode == RESULT_OK && requestCode == TODO_VIEW_REQUEST) {<br />

// Fetch the selected result.<br />

long id = data.getLong(TodoActivity.TODO_ID, Todo.PLACEHOLDER_ID);<br />

}<br />

}<br />

}<br />

22/34


Intent-Filter<br />

Legen fest auf welche impliziten Intents e<strong>in</strong>e Komponente anspricht<br />

Explizite Intents s<strong>in</strong>d nicht von <strong>die</strong>sen Filtern betroffen<br />

Ermöglicht Reaktion auf System-Events (ankommende SMS, Systemstart, ...)<br />

23/34


Intent-Filter<br />

Legen fest auf welche impliziten Intents e<strong>in</strong>e Komponente anspricht<br />

Explizite Intents s<strong>in</strong>d nicht von <strong>die</strong>sen Filtern betroffen<br />

Ermöglicht Reaktion auf System-Events (ankommende SMS, Systemstart, ...)<br />

23/34


Intent-Filter<br />

Legen fest auf welche impliziten Intents e<strong>in</strong>e Komponente anspricht<br />

Explizite Intents s<strong>in</strong>d nicht von <strong>die</strong>sen Filtern betroffen<br />

Ermöglicht Reaktion auf System-Events (ankommende SMS, Systemstart, ...)<br />

23/34


Intent-Filter<br />

Legen fest auf welche impliziten Intents e<strong>in</strong>e Komponente anspricht<br />

Explizite Intents s<strong>in</strong>d nicht von <strong>die</strong>sen Filtern betroffen<br />

Ermöglicht Reaktion auf System-Events (ankommende SMS, Systemstart, ...)<br />

DeklarationimManifest<br />

<br />

<br />

...<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

...<br />

<br />

<br />

23/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

E<strong>in</strong> Service kann zwei Zustände annehmen:<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

E<strong>in</strong> Service kann zwei Zustände annehmen:<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

E<strong>in</strong> Service kann zwei Zustände annehmen:<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

E<strong>in</strong> Service kann zwei Zustände annehmen:<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

E<strong>in</strong> Service kann zwei Zustände annehmen:<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

E<strong>in</strong> Service kann zwei Zustände annehmen:<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

E<strong>in</strong> Service kann zwei Zustände annehmen:<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

E<strong>in</strong> Service kann zwei Zustände annehmen:<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

Im H<strong>in</strong>tergrund arbeitende Komponenten für länger andauernde Operationen<br />

Bietet ke<strong>in</strong>e eigene Oberfläche<br />

Läuft im selben Thread wie <strong>die</strong> Applikation<br />

Können von e<strong>in</strong>er anderen Komponente, Applikation oder durch e<strong>in</strong> Event<br />

(BroadcastReceiver) gestartet werden<br />

Kann an e<strong>in</strong>e andere Komponente gebunden werden um mit ihr zu <strong>in</strong>teragieren<br />

E<strong>in</strong> Service kann zwei Zustände annehmen:<br />

Gestartet (Aufruf mit startService())<br />

Beendet sich am Schluss selbst ohne e<strong>in</strong> Ergebnis zu liefern<br />

Kann praktisch unendlich laufen, auch wenn <strong>die</strong> startende<br />

Komponente beendet wurde<br />

Gebunden (Aufruf mit b<strong>in</strong>dService())<br />

Service wurde von anderen Komponente mit b<strong>in</strong>dService() an sich<br />

gebunden<br />

Interaktion (Nachrichten, Ergebnisse und Anfragen) mit startender<br />

Komponente möglich<br />

B<strong>in</strong>dung an beliebig viele Komponenten möglich<br />

Falls alle verbundenen Komponenten beendet oder getrennt<br />

werden, wird der Service beendet<br />

24/34


Services<br />

E<strong>in</strong>e<strong>in</strong>facher Service<br />

public class TheService extends Service {<br />

MediaPlayer player;<br />

@Override<br />

public IB<strong>in</strong>der onB<strong>in</strong>d(Intent <strong>in</strong>tent) {<br />

return null; // No b<strong>in</strong>d<strong>in</strong>g needed.<br />

}<br />

@Override<br />

public void onCreate() {<br />

Toast.makeText(this, "The Service started", Toast.LENGTH_LONG).show();<br />

player = MediaPlayer.create(this, R.raw.bra<strong>in</strong>candy);<br />

player.setLoop<strong>in</strong>g(false); // Set loop<strong>in</strong>g<br />

}<br />

@Override<br />

public void onDestroy() {<br />

Toast.makeText(this, "The Service stopped", Toast.LENGTH_LONG).show();<br />

player.stop();<br />

}<br />

@Override<br />

public void onStart(Intent <strong>in</strong>tent, <strong>in</strong>t startid) {<br />

Toast.makeText(this, "The Service started", Toast.LENGTH_LONG).show();<br />

player.start();<br />

}<br />

}<br />

25/34


Content-Provider<br />

Verwalten den Zugriff auf strukturierte Daten<br />

Kapseln <strong>die</strong> Daten und bieten Mechanismen zum Datenschutz<br />

ContentResolver ermöglichen <strong>die</strong> Kommunikation mit e<strong>in</strong>em ContentProvider als<br />

Client<br />

ContentProvider werden beötigt, wenn Daten zwischen Applikationen kopiert<br />

werden sollen oder angepasste Suchergebnisse benötigt werden<br />

Es existieren Android eigene ContentProvider für Audio, Video, Bilder und<br />

Kontakte<br />

26/34


Content-Provider<br />

Verwalten den Zugriff auf strukturierte Daten<br />

Kapseln <strong>die</strong> Daten und bieten Mechanismen zum Datenschutz<br />

ContentResolver ermöglichen <strong>die</strong> Kommunikation mit e<strong>in</strong>em ContentProvider als<br />

Client<br />

ContentProvider werden beötigt, wenn Daten zwischen Applikationen kopiert<br />

werden sollen oder angepasste Suchergebnisse benötigt werden<br />

Es existieren Android eigene ContentProvider für Audio, Video, Bilder und<br />

Kontakte<br />

26/34


Content-Provider<br />

Verwalten den Zugriff auf strukturierte Daten<br />

Kapseln <strong>die</strong> Daten und bieten Mechanismen zum Datenschutz<br />

ContentResolver ermöglichen <strong>die</strong> Kommunikation mit e<strong>in</strong>em ContentProvider als<br />

Client<br />

ContentProvider werden beötigt, wenn Daten zwischen Applikationen kopiert<br />

werden sollen oder angepasste Suchergebnisse benötigt werden<br />

Es existieren Android eigene ContentProvider für Audio, Video, Bilder und<br />

Kontakte<br />

26/34


Content-Provider<br />

Verwalten den Zugriff auf strukturierte Daten<br />

Kapseln <strong>die</strong> Daten und bieten Mechanismen zum Datenschutz<br />

ContentResolver ermöglichen <strong>die</strong> Kommunikation mit e<strong>in</strong>em ContentProvider als<br />

Client<br />

ContentProvider werden beötigt, wenn Daten zwischen Applikationen kopiert<br />

werden sollen oder angepasste Suchergebnisse benötigt werden<br />

Es existieren Android eigene ContentProvider für Audio, Video, Bilder und<br />

Kontakte<br />

26/34


Content-Provider<br />

Verwalten den Zugriff auf strukturierte Daten<br />

Kapseln <strong>die</strong> Daten und bieten Mechanismen zum Datenschutz<br />

ContentResolver ermöglichen <strong>die</strong> Kommunikation mit e<strong>in</strong>em ContentProvider als<br />

Client<br />

ContentProvider werden beötigt, wenn Daten zwischen Applikationen kopiert<br />

werden sollen oder angepasste Suchergebnisse benötigt werden<br />

Es existieren Android eigene ContentProvider für Audio, Video, Bilder und<br />

Kontakte<br />

26/34


Broadcast-Receiver<br />

Empfänger von Intents <strong>die</strong> mit sendBroadcast() versendet wurden<br />

Kommunikation zwischen verschiedenen Komponenten<br />

Reagieren auf System-Events<br />

27/34


Broadcast-Receiver<br />

Empfänger von Intents <strong>die</strong> mit sendBroadcast() versendet wurden<br />

Kommunikation zwischen verschiedenen Komponenten<br />

Reagieren auf System-Events<br />

27/34


Broadcast-Receiver<br />

Empfänger von Intents <strong>die</strong> mit sendBroadcast() versendet wurden<br />

Kommunikation zwischen verschiedenen Komponenten<br />

Reagieren auf System-Events<br />

27/34


Broadcast-Receiver<br />

Empfänger von Intents <strong>die</strong> mit sendBroadcast() versendet wurden<br />

Kommunikation zwischen verschiedenen Komponenten<br />

Reagieren auf System-Events<br />

DeklarationimManifest<br />

<br />

<br />

<br />

<br />

<br />

27/34


Broadcast-Receiver<br />

Empfänger von Intents <strong>die</strong> mit sendBroadcast() versendet wurden<br />

Kommunikation zwischen verschiedenen Komponenten<br />

Reagieren auf System-Events<br />

DeklarationimManifest<br />

<br />

<br />

<br />

<br />

<br />

Implementierung<br />

public class SmsObserver extends BroadcastReceiver {<br />

private Handler handler = new Handler();<br />

@Override<br />

public void onReceive(Context context, Intent <strong>in</strong>tent) {<br />

// Defer the process<strong>in</strong>g a little bit.<br />

handler.postDelayed(new SmsReader(context, <strong>in</strong>tent), 500);<br />

}<br />

}<br />

27/34


Widgets<br />

Das Widget Layout<br />

Die AppWidgetProviderInfo<br />

Der AppWidgetProvider<br />

28/34


Widgets<br />

M<strong>in</strong>iaturansicht, <strong>die</strong> <strong>in</strong> andere Applikationen, wie den Desktop <strong>in</strong>tegriert werden<br />

können<br />

Widgets werden periodisch aktualisiert<br />

Besteht aus folgenden Komponenten:<br />

AppWidgetProviderInfo XML-Datei, <strong>die</strong> für das System wichtige Informationen<br />

enthält<br />

AppWidgetProvider Implementiert <strong>die</strong> grundlegenden Methoden um mit dem<br />

Widget zu <strong>in</strong>teragieren. Interaktion basiert auf Broadcasts.<br />

WidgetView Def<strong>in</strong>iert das zu Anfang sichtbare Layout (XML-Datei)<br />

29/34


Widgets<br />

M<strong>in</strong>iaturansicht, <strong>die</strong> <strong>in</strong> andere Applikationen, wie den Desktop <strong>in</strong>tegriert werden<br />

können<br />

Widgets werden periodisch aktualisiert<br />

Besteht aus folgenden Komponenten:<br />

AppWidgetProviderInfo XML-Datei, <strong>die</strong> für das System wichtige Informationen<br />

enthält<br />

AppWidgetProvider Implementiert <strong>die</strong> grundlegenden Methoden um mit dem<br />

Widget zu <strong>in</strong>teragieren. Interaktion basiert auf Broadcasts.<br />

WidgetView Def<strong>in</strong>iert das zu Anfang sichtbare Layout (XML-Datei)<br />

29/34


Widgets<br />

M<strong>in</strong>iaturansicht, <strong>die</strong> <strong>in</strong> andere Applikationen, wie den Desktop <strong>in</strong>tegriert werden<br />

können<br />

Widgets werden periodisch aktualisiert<br />

Besteht aus folgenden Komponenten:<br />

AppWidgetProviderInfo XML-Datei, <strong>die</strong> für das System wichtige Informationen<br />

enthält<br />

AppWidgetProvider Implementiert <strong>die</strong> grundlegenden Methoden um mit dem<br />

Widget zu <strong>in</strong>teragieren. Interaktion basiert auf Broadcasts.<br />

WidgetView Def<strong>in</strong>iert das zu Anfang sichtbare Layout (XML-Datei)<br />

29/34


Widgets<br />

M<strong>in</strong>iaturansicht, <strong>die</strong> <strong>in</strong> andere Applikationen, wie den Desktop <strong>in</strong>tegriert werden<br />

können<br />

Widgets werden periodisch aktualisiert<br />

Besteht aus folgenden Komponenten:<br />

AppWidgetProviderInfo XML-Datei, <strong>die</strong> für das System wichtige Informationen<br />

enthält<br />

AppWidgetProvider Implementiert <strong>die</strong> grundlegenden Methoden um mit dem<br />

Widget zu <strong>in</strong>teragieren. Interaktion basiert auf Broadcasts.<br />

WidgetView Def<strong>in</strong>iert das zu Anfang sichtbare Layout (XML-Datei)<br />

29/34


Widgets<br />

M<strong>in</strong>iaturansicht, <strong>die</strong> <strong>in</strong> andere Applikationen, wie den Desktop <strong>in</strong>tegriert werden<br />

können<br />

Widgets werden periodisch aktualisiert<br />

Besteht aus folgenden Komponenten:<br />

AppWidgetProviderInfo XML-Datei, <strong>die</strong> für das System wichtige Informationen<br />

enthält<br />

AppWidgetProvider Implementiert <strong>die</strong> grundlegenden Methoden um mit dem<br />

Widget zu <strong>in</strong>teragieren. Interaktion basiert auf Broadcasts.<br />

WidgetView Def<strong>in</strong>iert das zu Anfang sichtbare Layout (XML-Datei)<br />

29/34


Widgets<br />

M<strong>in</strong>iaturansicht, <strong>die</strong> <strong>in</strong> andere Applikationen, wie den Desktop <strong>in</strong>tegriert werden<br />

können<br />

Widgets werden periodisch aktualisiert<br />

Besteht aus folgenden Komponenten:<br />

AppWidgetProviderInfo XML-Datei, <strong>die</strong> für das System wichtige Informationen<br />

enthält<br />

AppWidgetProvider Implementiert <strong>die</strong> grundlegenden Methoden um mit dem<br />

Widget zu <strong>in</strong>teragieren. Interaktion basiert auf Broadcasts.<br />

WidgetView Def<strong>in</strong>iert das zu Anfang sichtbare Layout (XML-Datei)<br />

29/34


Widgets<br />

M<strong>in</strong>iaturansicht, <strong>die</strong> <strong>in</strong> andere Applikationen, wie den Desktop <strong>in</strong>tegriert werden<br />

können<br />

Widgets werden periodisch aktualisiert<br />

Besteht aus folgenden Komponenten:<br />

AppWidgetProviderInfo XML-Datei, <strong>die</strong> für das System wichtige Informationen<br />

enthält<br />

AppWidgetProvider Implementiert <strong>die</strong> grundlegenden Methoden um mit dem<br />

Widget zu <strong>in</strong>teragieren. Interaktion basiert auf Broadcasts.<br />

WidgetView Def<strong>in</strong>iert das zu Anfang sichtbare Layout (XML-Datei)<br />

Abbildung: Das E<strong>in</strong>stellungs-Widget<br />

29/34


Widgets<br />

M<strong>in</strong>iaturansicht, <strong>die</strong> <strong>in</strong> andere Applikationen, wie den Desktop <strong>in</strong>tegriert werden<br />

können<br />

Widgets werden periodisch aktualisiert<br />

Besteht aus folgenden Komponenten:<br />

AppWidgetProviderInfo XML-Datei, <strong>die</strong> für das System wichtige Informationen<br />

enthält<br />

AppWidgetProvider Implementiert <strong>die</strong> grundlegenden Methoden um mit dem<br />

Widget zu <strong>in</strong>teragieren. Interaktion basiert auf Broadcasts.<br />

WidgetView Def<strong>in</strong>iert das zu Anfang sichtbare Layout (XML-Datei)<br />

Abbildung: Das E<strong>in</strong>stellungs-Widget<br />

Optional kann auch e<strong>in</strong>e gesonderte Aktivität zur Konfiguration des Widget h<strong>in</strong>terlegt<br />

werden.<br />

29/34


WidgetLayout<br />

Deklaration des Layouts <strong>in</strong> Form von XML<br />

Layouts werden <strong>in</strong> res/layouts/ gespeichert<br />

Nicht alle Views und ViewGroups können verwendet werden (NumberPicker)<br />

30/34


WidgetLayout<br />

Deklaration des Layouts <strong>in</strong> Form von XML<br />

Layouts werden <strong>in</strong> res/layouts/ gespeichert<br />

Nicht alle Views und ViewGroups können verwendet werden (NumberPicker)<br />

30/34


WidgetLayout<br />

Deklaration des Layouts <strong>in</strong> Form von XML<br />

Layouts werden <strong>in</strong> res/layouts/ gespeichert<br />

Nicht alle Views und ViewGroups können verwendet werden (NumberPicker)<br />

30/34


WidgetLayout<br />

Deklaration des Layouts <strong>in</strong> Form von XML<br />

Layouts werden <strong>in</strong> res/layouts/ gespeichert<br />

Nicht alle Views und ViewGroups können verwendet werden (NumberPicker)<br />

DasWidgetLayout<br />

<br />

<br />

<br />

30/34


DieAppWidgetProviderInfo<br />

Def<strong>in</strong>iert alle essentiellen Rahmenbed<strong>in</strong>gungen e<strong>in</strong>es Widgets (<strong>in</strong>itiales Layout,<br />

Bemaßungen, Dauer bis zur Aktualisierung)<br />

Deklaration <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

m<strong>in</strong>Width M<strong>in</strong>imale Breite des Widgets <strong>in</strong> dip<br />

m<strong>in</strong>Height M<strong>in</strong>imale Höhe des Widgets <strong>in</strong> dip<br />

updatePeriodMillis Dauer bis zur nächsten Aktualisierung des Widgets <strong>in</strong><br />

Millisekunden<br />

<strong>in</strong>itialLayout Das <strong>in</strong>itiale Layout<br />

resizeMode Def<strong>in</strong>iert, wie <strong>die</strong> Bemaßungen durch den Benutzer angepasst werden<br />

können<br />

31/34


DieAppWidgetProviderInfo<br />

Def<strong>in</strong>iert alle essentiellen Rahmenbed<strong>in</strong>gungen e<strong>in</strong>es Widgets (<strong>in</strong>itiales Layout,<br />

Bemaßungen, Dauer bis zur Aktualisierung)<br />

Deklaration <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

m<strong>in</strong>Width M<strong>in</strong>imale Breite des Widgets <strong>in</strong> dip<br />

m<strong>in</strong>Height M<strong>in</strong>imale Höhe des Widgets <strong>in</strong> dip<br />

updatePeriodMillis Dauer bis zur nächsten Aktualisierung des Widgets <strong>in</strong><br />

Millisekunden<br />

<strong>in</strong>itialLayout Das <strong>in</strong>itiale Layout<br />

resizeMode Def<strong>in</strong>iert, wie <strong>die</strong> Bemaßungen durch den Benutzer angepasst werden<br />

können<br />

31/34


DieAppWidgetProviderInfo<br />

Def<strong>in</strong>iert alle essentiellen Rahmenbed<strong>in</strong>gungen e<strong>in</strong>es Widgets (<strong>in</strong>itiales Layout,<br />

Bemaßungen, Dauer bis zur Aktualisierung)<br />

Deklaration <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

DieWidgetInfo<br />

<br />

m<strong>in</strong>Width M<strong>in</strong>imale Breite des Widgets <strong>in</strong> dip<br />

m<strong>in</strong>Height M<strong>in</strong>imale Höhe des Widgets <strong>in</strong> dip<br />

updatePeriodMillis Dauer bis zur nächsten Aktualisierung des Widgets <strong>in</strong><br />

Millisekunden<br />

<strong>in</strong>itialLayout Das <strong>in</strong>itiale Layout<br />

resizeMode Def<strong>in</strong>iert, wie <strong>die</strong> Bemaßungen durch den Benutzer angepasst werden<br />

können<br />

31/34


DieAppWidgetProviderInfo<br />

Def<strong>in</strong>iert alle essentiellen Rahmenbed<strong>in</strong>gungen e<strong>in</strong>es Widgets (<strong>in</strong>itiales Layout,<br />

Bemaßungen, Dauer bis zur Aktualisierung)<br />

Deklaration <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

DieWidgetInfo<br />

<br />

Die Attribute des appwidget-provider Elements:<br />

m<strong>in</strong>Width M<strong>in</strong>imale Breite des Widgets <strong>in</strong> dip<br />

m<strong>in</strong>Height M<strong>in</strong>imale Höhe des Widgets <strong>in</strong> dip<br />

updatePeriodMillis Dauer bis zur nächsten Aktualisierung des Widgets <strong>in</strong><br />

Millisekunden<br />

<strong>in</strong>itialLayout Das <strong>in</strong>itiale Layout<br />

resizeMode Def<strong>in</strong>iert, wie <strong>die</strong> Bemaßungen durch den Benutzer angepasst werden<br />

können<br />

31/34


DieAppWidgetProviderInfo<br />

Def<strong>in</strong>iert alle essentiellen Rahmenbed<strong>in</strong>gungen e<strong>in</strong>es Widgets (<strong>in</strong>itiales Layout,<br />

Bemaßungen, Dauer bis zur Aktualisierung)<br />

Deklaration <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

DieWidgetInfo<br />

<br />

Die Attribute des appwidget-provider Elements:<br />

m<strong>in</strong>Width M<strong>in</strong>imale Breite des Widgets <strong>in</strong> dip<br />

m<strong>in</strong>Height M<strong>in</strong>imale Höhe des Widgets <strong>in</strong> dip<br />

updatePeriodMillis Dauer bis zur nächsten Aktualisierung des Widgets <strong>in</strong><br />

Millisekunden<br />

<strong>in</strong>itialLayout Das <strong>in</strong>itiale Layout<br />

resizeMode Def<strong>in</strong>iert, wie <strong>die</strong> Bemaßungen durch den Benutzer angepasst werden<br />

können<br />

31/34


DieAppWidgetProviderInfo<br />

Def<strong>in</strong>iert alle essentiellen Rahmenbed<strong>in</strong>gungen e<strong>in</strong>es Widgets (<strong>in</strong>itiales Layout,<br />

Bemaßungen, Dauer bis zur Aktualisierung)<br />

Deklaration <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

DieWidgetInfo<br />

<br />

Die Attribute des appwidget-provider Elements:<br />

m<strong>in</strong>Width M<strong>in</strong>imale Breite des Widgets <strong>in</strong> dip<br />

m<strong>in</strong>Height M<strong>in</strong>imale Höhe des Widgets <strong>in</strong> dip<br />

updatePeriodMillis Dauer bis zur nächsten Aktualisierung des Widgets <strong>in</strong><br />

Millisekunden<br />

<strong>in</strong>itialLayout Das <strong>in</strong>itiale Layout<br />

resizeMode Def<strong>in</strong>iert, wie <strong>die</strong> Bemaßungen durch den Benutzer angepasst werden<br />

können<br />

31/34


DieAppWidgetProviderInfo<br />

Def<strong>in</strong>iert alle essentiellen Rahmenbed<strong>in</strong>gungen e<strong>in</strong>es Widgets (<strong>in</strong>itiales Layout,<br />

Bemaßungen, Dauer bis zur Aktualisierung)<br />

Deklaration <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

DieWidgetInfo<br />

<br />

Die Attribute des appwidget-provider Elements:<br />

m<strong>in</strong>Width M<strong>in</strong>imale Breite des Widgets <strong>in</strong> dip<br />

m<strong>in</strong>Height M<strong>in</strong>imale Höhe des Widgets <strong>in</strong> dip<br />

updatePeriodMillis Dauer bis zur nächsten Aktualisierung des Widgets <strong>in</strong><br />

Millisekunden<br />

<strong>in</strong>itialLayout Das <strong>in</strong>itiale Layout<br />

resizeMode Def<strong>in</strong>iert, wie <strong>die</strong> Bemaßungen durch den Benutzer angepasst werden<br />

können<br />

31/34


DieAppWidgetProviderInfo<br />

Def<strong>in</strong>iert alle essentiellen Rahmenbed<strong>in</strong>gungen e<strong>in</strong>es Widgets (<strong>in</strong>itiales Layout,<br />

Bemaßungen, Dauer bis zur Aktualisierung)<br />

Deklaration <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

DieWidgetInfo<br />

<br />

Die Attribute des appwidget-provider Elements:<br />

m<strong>in</strong>Width M<strong>in</strong>imale Breite des Widgets <strong>in</strong> dip<br />

m<strong>in</strong>Height M<strong>in</strong>imale Höhe des Widgets <strong>in</strong> dip<br />

updatePeriodMillis Dauer bis zur nächsten Aktualisierung des Widgets <strong>in</strong><br />

Millisekunden<br />

<strong>in</strong>itialLayout Das <strong>in</strong>itiale Layout<br />

resizeMode Def<strong>in</strong>iert, wie <strong>die</strong> Bemaßungen durch den Benutzer angepasst werden<br />

können<br />

31/34


DieAppWidgetProviderInfo<br />

Def<strong>in</strong>iert alle essentiellen Rahmenbed<strong>in</strong>gungen e<strong>in</strong>es Widgets (<strong>in</strong>itiales Layout,<br />

Bemaßungen, Dauer bis zur Aktualisierung)<br />

Deklaration <strong>in</strong> Form e<strong>in</strong>er XML-Datei<br />

DieWidgetInfo<br />

<br />

Die Attribute des appwidget-provider Elements:<br />

m<strong>in</strong>Width M<strong>in</strong>imale Breite des Widgets <strong>in</strong> dip<br />

m<strong>in</strong>Height M<strong>in</strong>imale Höhe des Widgets <strong>in</strong> dip<br />

updatePeriodMillis Dauer bis zur nächsten Aktualisierung des Widgets <strong>in</strong><br />

Millisekunden<br />

<strong>in</strong>itialLayout Das <strong>in</strong>itiale Layout<br />

resizeMode Def<strong>in</strong>iert, wie <strong>die</strong> Bemaßungen durch den Benutzer angepasst werden<br />

können<br />

31/34


DerAppWidgetProvider<br />

AppWidgetProvider ist von BroadcastReceiver abgeleitet<br />

Reagiert auf verschiedene Events und ruft entsprechende Methoden auf<br />

(FrontController Pattern)<br />

Broadcast werden ausgelöst, wenn e<strong>in</strong> Widget aktualisiert, gelöscht, aktiviert oder<br />

deaktiviert wird<br />

Folgenden Methoden verarbeiten <strong>die</strong> Events:<br />

onUpdate() Methode wird <strong>in</strong> regelmäßigen Abständen (updatePeriodMillis)<br />

aufgerufen – kümmert sich um <strong>die</strong> Aktualisierung des Widgets –<br />

sollte e<strong>in</strong> Konfigurationsdialog implementiert se<strong>in</strong>, muss <strong>die</strong>ser<br />

sich um den ersten Aufruf kümmern<br />

onDelete() Wird jedesmal aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs gelöscht<br />

wird.<br />

onEnabled() Wird dann aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs erzeugt wird<br />

(Ke<strong>in</strong> zweites mal).<br />

onDisabled() Wird aufgerufen wenn das letzte Widget <strong>die</strong>ses Typs gelöscht wird<br />

(Bere<strong>in</strong>igung temporärer Daten)<br />

onReceive() Methode wird immer ausgeführt, wenn e<strong>in</strong> Broadcast empfangen<br />

wird (muss zumeist nicht implementiert werden)<br />

32/34


DerAppWidgetProvider<br />

AppWidgetProvider ist von BroadcastReceiver abgeleitet<br />

Reagiert auf verschiedene Events und ruft entsprechende Methoden auf<br />

(FrontController Pattern)<br />

Broadcast werden ausgelöst, wenn e<strong>in</strong> Widget aktualisiert, gelöscht, aktiviert oder<br />

deaktiviert wird<br />

Folgenden Methoden verarbeiten <strong>die</strong> Events:<br />

onUpdate() Methode wird <strong>in</strong> regelmäßigen Abständen (updatePeriodMillis)<br />

aufgerufen – kümmert sich um <strong>die</strong> Aktualisierung des Widgets –<br />

sollte e<strong>in</strong> Konfigurationsdialog implementiert se<strong>in</strong>, muss <strong>die</strong>ser<br />

sich um den ersten Aufruf kümmern<br />

onDelete() Wird jedesmal aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs gelöscht<br />

wird.<br />

onEnabled() Wird dann aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs erzeugt wird<br />

(Ke<strong>in</strong> zweites mal).<br />

onDisabled() Wird aufgerufen wenn das letzte Widget <strong>die</strong>ses Typs gelöscht wird<br />

(Bere<strong>in</strong>igung temporärer Daten)<br />

onReceive() Methode wird immer ausgeführt, wenn e<strong>in</strong> Broadcast empfangen<br />

wird (muss zumeist nicht implementiert werden)<br />

32/34


DerAppWidgetProvider<br />

AppWidgetProvider ist von BroadcastReceiver abgeleitet<br />

Reagiert auf verschiedene Events und ruft entsprechende Methoden auf<br />

(FrontController Pattern)<br />

Broadcast werden ausgelöst, wenn e<strong>in</strong> Widget aktualisiert, gelöscht, aktiviert oder<br />

deaktiviert wird<br />

Folgenden Methoden verarbeiten <strong>die</strong> Events:<br />

onUpdate() Methode wird <strong>in</strong> regelmäßigen Abständen (updatePeriodMillis)<br />

aufgerufen – kümmert sich um <strong>die</strong> Aktualisierung des Widgets –<br />

sollte e<strong>in</strong> Konfigurationsdialog implementiert se<strong>in</strong>, muss <strong>die</strong>ser<br />

sich um den ersten Aufruf kümmern<br />

onDelete() Wird jedesmal aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs gelöscht<br />

wird.<br />

onEnabled() Wird dann aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs erzeugt wird<br />

(Ke<strong>in</strong> zweites mal).<br />

onDisabled() Wird aufgerufen wenn das letzte Widget <strong>die</strong>ses Typs gelöscht wird<br />

(Bere<strong>in</strong>igung temporärer Daten)<br />

onReceive() Methode wird immer ausgeführt, wenn e<strong>in</strong> Broadcast empfangen<br />

wird (muss zumeist nicht implementiert werden)<br />

32/34


DerAppWidgetProvider<br />

AppWidgetProvider ist von BroadcastReceiver abgeleitet<br />

Reagiert auf verschiedene Events und ruft entsprechende Methoden auf<br />

(FrontController Pattern)<br />

Broadcast werden ausgelöst, wenn e<strong>in</strong> Widget aktualisiert, gelöscht, aktiviert oder<br />

deaktiviert wird<br />

Folgenden Methoden verarbeiten <strong>die</strong> Events:<br />

onUpdate() Methode wird <strong>in</strong> regelmäßigen Abständen (updatePeriodMillis)<br />

aufgerufen – kümmert sich um <strong>die</strong> Aktualisierung des Widgets –<br />

sollte e<strong>in</strong> Konfigurationsdialog implementiert se<strong>in</strong>, muss <strong>die</strong>ser<br />

sich um den ersten Aufruf kümmern<br />

onDelete() Wird jedesmal aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs gelöscht<br />

wird.<br />

onEnabled() Wird dann aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs erzeugt wird<br />

(Ke<strong>in</strong> zweites mal).<br />

onDisabled() Wird aufgerufen wenn das letzte Widget <strong>die</strong>ses Typs gelöscht wird<br />

(Bere<strong>in</strong>igung temporärer Daten)<br />

onReceive() Methode wird immer ausgeführt, wenn e<strong>in</strong> Broadcast empfangen<br />

wird (muss zumeist nicht implementiert werden)<br />

32/34


DerAppWidgetProvider<br />

AppWidgetProvider ist von BroadcastReceiver abgeleitet<br />

Reagiert auf verschiedene Events und ruft entsprechende Methoden auf<br />

(FrontController Pattern)<br />

Broadcast werden ausgelöst, wenn e<strong>in</strong> Widget aktualisiert, gelöscht, aktiviert oder<br />

deaktiviert wird<br />

Folgenden Methoden verarbeiten <strong>die</strong> Events:<br />

onUpdate() Methode wird <strong>in</strong> regelmäßigen Abständen (updatePeriodMillis)<br />

aufgerufen – kümmert sich um <strong>die</strong> Aktualisierung des Widgets –<br />

sollte e<strong>in</strong> Konfigurationsdialog implementiert se<strong>in</strong>, muss <strong>die</strong>ser<br />

sich um den ersten Aufruf kümmern<br />

onDelete() Wird jedesmal aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs gelöscht<br />

wird.<br />

onEnabled() Wird dann aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs erzeugt wird<br />

(Ke<strong>in</strong> zweites mal).<br />

onDisabled() Wird aufgerufen wenn das letzte Widget <strong>die</strong>ses Typs gelöscht wird<br />

(Bere<strong>in</strong>igung temporärer Daten)<br />

onReceive() Methode wird immer ausgeführt, wenn e<strong>in</strong> Broadcast empfangen<br />

wird (muss zumeist nicht implementiert werden)<br />

32/34


DerAppWidgetProvider<br />

AppWidgetProvider ist von BroadcastReceiver abgeleitet<br />

Reagiert auf verschiedene Events und ruft entsprechende Methoden auf<br />

(FrontController Pattern)<br />

Broadcast werden ausgelöst, wenn e<strong>in</strong> Widget aktualisiert, gelöscht, aktiviert oder<br />

deaktiviert wird<br />

Folgenden Methoden verarbeiten <strong>die</strong> Events:<br />

onUpdate() Methode wird <strong>in</strong> regelmäßigen Abständen (updatePeriodMillis)<br />

aufgerufen – kümmert sich um <strong>die</strong> Aktualisierung des Widgets –<br />

sollte e<strong>in</strong> Konfigurationsdialog implementiert se<strong>in</strong>, muss <strong>die</strong>ser<br />

sich um den ersten Aufruf kümmern<br />

onDelete() Wird jedesmal aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs gelöscht<br />

wird.<br />

onEnabled() Wird dann aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs erzeugt wird<br />

(Ke<strong>in</strong> zweites mal).<br />

onDisabled() Wird aufgerufen wenn das letzte Widget <strong>die</strong>ses Typs gelöscht wird<br />

(Bere<strong>in</strong>igung temporärer Daten)<br />

onReceive() Methode wird immer ausgeführt, wenn e<strong>in</strong> Broadcast empfangen<br />

wird (muss zumeist nicht implementiert werden)<br />

32/34


DerAppWidgetProvider<br />

AppWidgetProvider ist von BroadcastReceiver abgeleitet<br />

Reagiert auf verschiedene Events und ruft entsprechende Methoden auf<br />

(FrontController Pattern)<br />

Broadcast werden ausgelöst, wenn e<strong>in</strong> Widget aktualisiert, gelöscht, aktiviert oder<br />

deaktiviert wird<br />

Folgenden Methoden verarbeiten <strong>die</strong> Events:<br />

onUpdate() Methode wird <strong>in</strong> regelmäßigen Abständen (updatePeriodMillis)<br />

aufgerufen – kümmert sich um <strong>die</strong> Aktualisierung des Widgets –<br />

sollte e<strong>in</strong> Konfigurationsdialog implementiert se<strong>in</strong>, muss <strong>die</strong>ser<br />

sich um den ersten Aufruf kümmern<br />

onDelete() Wird jedesmal aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs gelöscht<br />

wird.<br />

onEnabled() Wird dann aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs erzeugt wird<br />

(Ke<strong>in</strong> zweites mal).<br />

onDisabled() Wird aufgerufen wenn das letzte Widget <strong>die</strong>ses Typs gelöscht wird<br />

(Bere<strong>in</strong>igung temporärer Daten)<br />

onReceive() Methode wird immer ausgeführt, wenn e<strong>in</strong> Broadcast empfangen<br />

wird (muss zumeist nicht implementiert werden)<br />

32/34


DerAppWidgetProvider<br />

AppWidgetProvider ist von BroadcastReceiver abgeleitet<br />

Reagiert auf verschiedene Events und ruft entsprechende Methoden auf<br />

(FrontController Pattern)<br />

Broadcast werden ausgelöst, wenn e<strong>in</strong> Widget aktualisiert, gelöscht, aktiviert oder<br />

deaktiviert wird<br />

Folgenden Methoden verarbeiten <strong>die</strong> Events:<br />

onUpdate() Methode wird <strong>in</strong> regelmäßigen Abständen (updatePeriodMillis)<br />

aufgerufen – kümmert sich um <strong>die</strong> Aktualisierung des Widgets –<br />

sollte e<strong>in</strong> Konfigurationsdialog implementiert se<strong>in</strong>, muss <strong>die</strong>ser<br />

sich um den ersten Aufruf kümmern<br />

onDelete() Wird jedesmal aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs gelöscht<br />

wird.<br />

onEnabled() Wird dann aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs erzeugt wird<br />

(Ke<strong>in</strong> zweites mal).<br />

onDisabled() Wird aufgerufen wenn das letzte Widget <strong>die</strong>ses Typs gelöscht wird<br />

(Bere<strong>in</strong>igung temporärer Daten)<br />

onReceive() Methode wird immer ausgeführt, wenn e<strong>in</strong> Broadcast empfangen<br />

wird (muss zumeist nicht implementiert werden)<br />

32/34


DerAppWidgetProvider<br />

AppWidgetProvider ist von BroadcastReceiver abgeleitet<br />

Reagiert auf verschiedene Events und ruft entsprechende Methoden auf<br />

(FrontController Pattern)<br />

Broadcast werden ausgelöst, wenn e<strong>in</strong> Widget aktualisiert, gelöscht, aktiviert oder<br />

deaktiviert wird<br />

Folgenden Methoden verarbeiten <strong>die</strong> Events:<br />

onUpdate() Methode wird <strong>in</strong> regelmäßigen Abständen (updatePeriodMillis)<br />

aufgerufen – kümmert sich um <strong>die</strong> Aktualisierung des Widgets –<br />

sollte e<strong>in</strong> Konfigurationsdialog implementiert se<strong>in</strong>, muss <strong>die</strong>ser<br />

sich um den ersten Aufruf kümmern<br />

onDelete() Wird jedesmal aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs gelöscht<br />

wird.<br />

onEnabled() Wird dann aufgerufen wenn e<strong>in</strong> Widget <strong>die</strong>ses Typs erzeugt wird<br />

(Ke<strong>in</strong> zweites mal).<br />

onDisabled() Wird aufgerufen wenn das letzte Widget <strong>die</strong>ses Typs gelöscht wird<br />

(Bere<strong>in</strong>igung temporärer Daten)<br />

onReceive() Methode wird immer ausgeführt, wenn e<strong>in</strong> Broadcast empfangen<br />

wird (muss zumeist nicht implementiert werden)<br />

32/34


DerAppWidgetProvider<br />

Der AppWidgetProvider<br />

public class HelloWidgetProvider extends AppWidgetProvider {<br />

public void onUpdate(Context context, AppWidgetManager appWidgetManager, <strong>in</strong>t[] appWidgetIds) {<br />

f<strong>in</strong>al <strong>in</strong>t numWidgets = appWidgetIds.length;<br />

f<strong>in</strong>al Str<strong>in</strong>g[] helloStack = {<br />

"Hello", "Hi", "Shalom", "Ahlan", "Marhaba",<br />

"Terve", "Bula", "Aloha", "Salut", "Ciao",<br />

"Ave", "Hoi", "Morn", "Tschau", "Namaste"};<br />

// Loop over all <strong>in</strong>stances of this widget.<br />

for (<strong>in</strong>t i = 0; i < numWidgets; i++) {<br />

// Fetch the ListView, ...<br />

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);<br />

// ... calculate stack position ...<br />

<strong>in</strong>t rand = (<strong>in</strong>t) (Math.random()*15);<br />

// ... and set the hello view.<br />

views.setTextViewText(R.id.hello, this.helloStack[rand]);<br />

// Perform an update on the current app widget.<br />

appWidgetManager.updateAppWidget(appWidgetIds[i], views);<br />

}<br />

}<br />

}<br />

33/34


Android 4<br />

Vere<strong>in</strong>heitlichtes GUI-Framework für Smartphones, Tablets und andere Endgeräte<br />

E<strong>in</strong>facher Zugriff auf Kontakte, Profildaten, Kalender E<strong>in</strong>träge und soziale<br />

Netzwerke<br />

Verbesserte Multimedia API (Neue Codecs, erweitertes Stream<strong>in</strong>g, ...)<br />

Neue Komponenten für <strong>die</strong> Erstellung von Benutzeroberflächen (NumberPicker,<br />

...)<br />

Verbesserung der Hardware-Anforderungen (Hardware beschleunigte<br />

2D-Darstellung)<br />

Erweiterung von Widgets (ViewGroups werden nun Unterstützt)<br />

Neue VPN-API<br />

34/34


Android 4<br />

Vere<strong>in</strong>heitlichtes GUI-Framework für Smartphones, Tablets und andere Endgeräte<br />

E<strong>in</strong>facher Zugriff auf Kontakte, Profildaten, Kalender E<strong>in</strong>träge und soziale<br />

Netzwerke<br />

Verbesserte Multimedia API (Neue Codecs, erweitertes Stream<strong>in</strong>g, ...)<br />

Neue Komponenten für <strong>die</strong> Erstellung von Benutzeroberflächen (NumberPicker,<br />

...)<br />

Verbesserung der Hardware-Anforderungen (Hardware beschleunigte<br />

2D-Darstellung)<br />

Erweiterung von Widgets (ViewGroups werden nun Unterstützt)<br />

Neue VPN-API<br />

34/34


Android 4<br />

Vere<strong>in</strong>heitlichtes GUI-Framework für Smartphones, Tablets und andere Endgeräte<br />

E<strong>in</strong>facher Zugriff auf Kontakte, Profildaten, Kalender E<strong>in</strong>träge und soziale<br />

Netzwerke<br />

Verbesserte Multimedia API (Neue Codecs, erweitertes Stream<strong>in</strong>g, ...)<br />

Neue Komponenten für <strong>die</strong> Erstellung von Benutzeroberflächen (NumberPicker,<br />

...)<br />

Verbesserung der Hardware-Anforderungen (Hardware beschleunigte<br />

2D-Darstellung)<br />

Erweiterung von Widgets (ViewGroups werden nun Unterstützt)<br />

Neue VPN-API<br />

34/34


Android 4<br />

Vere<strong>in</strong>heitlichtes GUI-Framework für Smartphones, Tablets und andere Endgeräte<br />

E<strong>in</strong>facher Zugriff auf Kontakte, Profildaten, Kalender E<strong>in</strong>träge und soziale<br />

Netzwerke<br />

Verbesserte Multimedia API (Neue Codecs, erweitertes Stream<strong>in</strong>g, ...)<br />

Neue Komponenten für <strong>die</strong> Erstellung von Benutzeroberflächen (NumberPicker,<br />

...)<br />

Verbesserung der Hardware-Anforderungen (Hardware beschleunigte<br />

2D-Darstellung)<br />

Erweiterung von Widgets (ViewGroups werden nun Unterstützt)<br />

Neue VPN-API<br />

34/34


Android 4<br />

Vere<strong>in</strong>heitlichtes GUI-Framework für Smartphones, Tablets und andere Endgeräte<br />

E<strong>in</strong>facher Zugriff auf Kontakte, Profildaten, Kalender E<strong>in</strong>träge und soziale<br />

Netzwerke<br />

Verbesserte Multimedia API (Neue Codecs, erweitertes Stream<strong>in</strong>g, ...)<br />

Neue Komponenten für <strong>die</strong> Erstellung von Benutzeroberflächen (NumberPicker,<br />

...)<br />

Verbesserung der Hardware-Anforderungen (Hardware beschleunigte<br />

2D-Darstellung)<br />

Erweiterung von Widgets (ViewGroups werden nun Unterstützt)<br />

Neue VPN-API<br />

34/34


Android 4<br />

Vere<strong>in</strong>heitlichtes GUI-Framework für Smartphones, Tablets und andere Endgeräte<br />

E<strong>in</strong>facher Zugriff auf Kontakte, Profildaten, Kalender E<strong>in</strong>träge und soziale<br />

Netzwerke<br />

Verbesserte Multimedia API (Neue Codecs, erweitertes Stream<strong>in</strong>g, ...)<br />

Neue Komponenten für <strong>die</strong> Erstellung von Benutzeroberflächen (NumberPicker,<br />

...)<br />

Verbesserung der Hardware-Anforderungen (Hardware beschleunigte<br />

2D-Darstellung)<br />

Erweiterung von Widgets (ViewGroups werden nun Unterstützt)<br />

Neue VPN-API<br />

34/34


Android 4<br />

Vere<strong>in</strong>heitlichtes GUI-Framework für Smartphones, Tablets und andere Endgeräte<br />

E<strong>in</strong>facher Zugriff auf Kontakte, Profildaten, Kalender E<strong>in</strong>träge und soziale<br />

Netzwerke<br />

Verbesserte Multimedia API (Neue Codecs, erweitertes Stream<strong>in</strong>g, ...)<br />

Neue Komponenten für <strong>die</strong> Erstellung von Benutzeroberflächen (NumberPicker,<br />

...)<br />

Verbesserung der Hardware-Anforderungen (Hardware beschleunigte<br />

2D-Darstellung)<br />

Erweiterung von Widgets (ViewGroups werden nun Unterstützt)<br />

Neue VPN-API<br />

34/34

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!