<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=87.180.99.32</id>
	<title>Wikizone - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=87.180.99.32"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/87.180.99.32"/>
	<updated>2026-05-07T00:32:49Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Android_Development&amp;diff=20019</id>
		<title>Android Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Android_Development&amp;diff=20019"/>
		<updated>2013-10-08T14:08:31Z</updated>

		<summary type="html">&lt;p&gt;87.180.99.32: /* Ein selbst signiertes Release Zertifikat erstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
* Android Developer Referenz von Google: http://developer.android.com/reference/packages.html&lt;br /&gt;
* http://www.vogella.com/articles/Android/article.html (umfassendes Tutorial gepflegt seit 2009 (Stand 2013))&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Referenz]]&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Snippets]]&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Maps]]&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Setting up PlayStore Service]]&lt;br /&gt;
&lt;br /&gt;
== Android Development - First Steps ==&lt;br /&gt;
[[Android Development - Hello World]]&lt;br /&gt;
&lt;br /&gt;
[[Android Development - User Interface programmieren]] (Layout anlegen)&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Grundfunktionen Programmieren]] (Neue Activity starten, Intents, Button und Textfelder)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Android Entwicklungsumgebung ==&lt;br /&gt;
=== Eclipse und Android SDK ===&lt;br /&gt;
Es gibt ein angepasstes Eclipse Paket mit den Android Tools auf http://developer.android.com/sdk/installing/index.html, das ist der schnellste Weg. Im Folgenden ein Beispiel für die klassische Installation, bei der wir alle Schritte nacheinander durchführen.&lt;br /&gt;
&lt;br /&gt;
==== Benötigte Komponenten ====&lt;br /&gt;
Im Einzelnen benötigt man über eine Eclipse / Java IDE noch:&lt;br /&gt;
* ADT plugin (Android Developer Tools)&lt;br /&gt;
* Android SDK Tools&lt;br /&gt;
* Android Platform-tools&lt;br /&gt;
* The latest Android platform&lt;br /&gt;
* The latest Android system image for the emulator&lt;br /&gt;
&lt;br /&gt;
==== Eclipse Installation ====&lt;br /&gt;
http://help.eclipse.org/juno/index.jsp&lt;br /&gt;
&lt;br /&gt;
* Download Eclipse (z.B. Classic)&lt;br /&gt;
* Download und Installation des Java JDK (Java Entwickler SDK)&lt;br /&gt;
* Registrieren des JDK in Eclipse (Preferences &amp;gt; Java &amp;gt; Installed JREs&lt;br /&gt;
==== Android SDK installieren ====&lt;br /&gt;
* Android SDK downloaden und installieren (benötigt JDK) Beim ersten Start fragt der SDK Manager welche Tools für welche Android Plattform man nachladen möchte. Wenn man mit Eclipse arbeitet sollte man den &amp;#039;&amp;#039;&amp;#039;Manager abbrechen&amp;#039;&amp;#039;&amp;#039; und dies später über das Eclipse Plugin machen.&lt;br /&gt;
==== ADT Plugin für Eclipse installieren ====&lt;br /&gt;
http://developer.android.com/sdk/installing/installing-adt.html&lt;br /&gt;
&lt;br /&gt;
* In Eclipse &amp;#039;&amp;#039;Help &amp;gt; Install New Software&amp;#039;&amp;#039;.&lt;br /&gt;
* Add Repository Dialog &amp;quot;&amp;#039;&amp;#039;ADT Plugin&amp;#039;&amp;#039;&amp;quot; als Name und folgende URL angeben:&lt;br /&gt;
 https://dl-ssl.google.com/android/eclipse/&lt;br /&gt;
Bei Problemen mit der Verbindunghttp verwenden.&lt;br /&gt;
* Developer Tools auswählen und die Installation fertigstellen.&lt;br /&gt;
* Nach der Installation Eclipse neu starten.&lt;br /&gt;
* Nach dem Neustart von Eclipse fragt das Plugin nach dem Ort des SDK (wenn er es noch nicht gefunden hat)&lt;br /&gt;
* Über Windows SDK-Manager können wir jetzt jederzeit die restlichen Android Komponenten laden die wir benötigen.&lt;br /&gt;
&lt;br /&gt;
== Android Apps signieren und veröffentlichen ==&lt;br /&gt;
http://developer.android.com/guide/topics/security/security.html&lt;br /&gt;
&lt;br /&gt;
Apps bekommen ein Sicherheitszertifikat mit dem sie vor dem veröffentlichen signiert werden. Diese &amp;#039;&amp;#039;&amp;#039;Signatur erstellt i.d.r. der Entwickler selbst&amp;#039;&amp;#039;&amp;#039;. Beim Debuggen erstellt Eclipse automatisch ein Testzertifikat. Für manche Anwendungen die einen API Key von Google benötigen muß man schon frühzeitig ein Release Zertifikat erstellen, das man bei Google Registrieren kann.&lt;br /&gt;
&lt;br /&gt;
===Ein selbst signiertes Release Zertifikat erstellen ===&lt;br /&gt;
Quelle: Buch Android Programmierung&lt;br /&gt;
&lt;br /&gt;
Sind Sie bereit, Ihren Code für die Veröffentlichung zu signieren? Zunächst erstellen Sie mit dem keytool-Befehl einen privaten Schlüssel:&lt;br /&gt;
 keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 50000 &lt;br /&gt;
Für my-release-key können Sie einen Namen Ihrer Wahl angeben und für alias_name einen Alias Ihrer Wahl. Die Parameter -keysize und -validity sollten so bleiben wie im Code oben.&lt;br /&gt;
&lt;br /&gt;
==== Sicherheit ====&lt;br /&gt;
Sobald eine App mit dem Zertifikat veröffentlicht ist wird das Zertifikat unersetzlich.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie Ihr Signierzertifikat verlieren, verlieren Sie Ihre Identität für Android-Geräte und Google Play. Das heißt, dass Sie, obwohl Sie den gleichen Code wie zuvor kompilieren und veröffentlichen, die neu kompilierten Anwendungen nicht nutzen können, um bereits veröffentlichte Anwendungen zu aktualisieren, da weder Android-Geräte noch Google Play Sie als den App-Urheber wiedererkennen.&lt;br /&gt;
Bewahren Sie mehrere Sicherungskopien Ihres Signierzertifikats auf unterschiedlichen Typen von Medien (auch auf Papier) an verschiedenen Orten auf. Und sorgen Sie dafür, dass diese Sicherungskopien sicher sind. Wenn Ihr Signierzertifikat von anderen als Ihnen selbst genutzt wird, können diese Leute Ihre Programme auf den Android-Geräten Ihrer Benutzer ändern.&lt;br /&gt;
Ausführliche Empfehlungen von der Android-Entwicklerseite zur Sicherung Ihres Signierzertifikats finden Sie unter http://developer.android.com/guide/publishing/app-signing.html#secure-key.&lt;br /&gt;
&lt;br /&gt;
Bevor die App veröffentlicht ist kann man die Signatur jederzeit wegwerfen und erneuern.&lt;br /&gt;
&lt;br /&gt;
=== Google Maps API Key ===&lt;br /&gt;
* Notwendig für Zugriffe auf den Google Maps Kartenserver. &lt;br /&gt;
* Alle Android Apps müssen mit einem digitalen Zertifikat signiert werden für das der Entwickler den private key hat. Damit werden die Apps auf dem Map-Server oder im PlayStore getrackt.&lt;br /&gt;
* Man benötigt einen Schlüssel für jedes Zertifikat&lt;br /&gt;
* In der Praxis erstellt man ein Zertifikat für jede App (theoretisch kann man auch mehrere mit einem Zertifikat signieren)&lt;br /&gt;
* Für die Entwicklung nutzt Eclipse ein Entwickler Zertifikat ohne API Key dies reicht nicht bei Apps die einen Maps API Key benötigen&lt;br /&gt;
=== Google Maps API Key erstellen ===&lt;br /&gt;
==== Google Play Services Installieren ====&lt;br /&gt;
Dieses SDK benötigt man um einen Key zu holen (Dieser Schritt muß nur einmal gemacht werden)&lt;br /&gt;
* Android SDK aus Eclipse oder über Terminal starten.(On Mac or Linux,  tools/ directory Befehl: android sdk)&lt;br /&gt;
* Im Android SDK Extras &amp;gt; Google Play services SDK installieren&lt;br /&gt;
==== App Zertifikat Fingerprint anzeigen ====&lt;br /&gt;
Es gibt Debug Zertifikate und Release Zertifikate. Das Debug Zertifikat wird von Eclipse automatisch beim Debuggen der App erstellt. Um den passenden Key zu bekommen braucht man den Fingerprint des gewünschten  Zertifikats.&lt;br /&gt;
===== Debug Zertifikat Fingerprint =====&lt;br /&gt;
Die Zertifikate kann man aus dem debug keystore file auslesen. Es nennt sich debug.keystore und wird beim ersten erstellen des Projekts erzeugt. Es befindet sich im gleichen Verzeichnis wie die Android Virtual Device (AVD) Dateien. Unter Mac ist das:&lt;br /&gt;
 ~/.android/&lt;br /&gt;
Windows Vista and Windows 7: &lt;br /&gt;
 C:\Users\your_user_name\.android\&lt;br /&gt;
In Eclipse kann man den Ort mit &lt;br /&gt;
 Windows &amp;gt; Prefs &amp;gt; Android &amp;gt; Build &lt;br /&gt;
Anzeigen lassen (dann kopieren und in den Finder kopieren.&lt;br /&gt;
&lt;br /&gt;
List the SHA-1 fingerprint im Terminal:&lt;br /&gt;
&lt;br /&gt;
 keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android&lt;br /&gt;
Ausgabe sieht etwa so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Alias name: androiddebugkey&lt;br /&gt;
 Creation date: Jan 01, 2013&lt;br /&gt;
 Entry type: PrivateKeyEntry&lt;br /&gt;
 Certificate chain length: 1&lt;br /&gt;
 Certificate[1]:&lt;br /&gt;
 Owner: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Issuer: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Serial number: 4aa9b300&lt;br /&gt;
 Valid from: Mon Jan 01 08:04:04 UTC 2013 until: Mon Jan 01 18:04:04 PST 2033&lt;br /&gt;
 Certificate fingerprints:&lt;br /&gt;
      MD5:  AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6A:AC:F9&lt;br /&gt;
      SHA1: BB:0D:AC:74:D3:21:E1:43:07:71:9B:62:90:AF:A1:66:6E:44:5D:75&lt;br /&gt;
      Signature algorithm name: SHA1withRSA&lt;br /&gt;
      Version: 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Zeile mit SHA1 enthält den fingerprint, eine Sequenz von 20 two-digit hexadecimal numbers separated by colons.&lt;br /&gt;
&lt;br /&gt;
===== Release Zertifikat anzeigen =====&lt;br /&gt;
Auch hier muß man das release certificate keystore file finden, dies ist jedoch nicht immer am gleichen Ort. Man kann einen Ort festlegen, wenn man das release build für die App macht. Wenn man es nicht macht bleibt die App unsigniert und man kann Sie beim Publizieren Signieren. Da wir aber den API Key brauchen geht das in diesem Fall nicht.&lt;br /&gt;
&lt;br /&gt;
Für das release Zertifikat braucht man auch den certificate&amp;#039;s alias und die Passwörter für den keystore und das Zertifikat.&lt;br /&gt;
&lt;br /&gt;
So kann man die Alias Liste für alle Keys im Keystore anzeigen:&lt;br /&gt;
&lt;br /&gt;
 keytool -list -keystore your_keystore_name&lt;br /&gt;
Ersetze &amp;#039;&amp;#039;your_keystore_name&amp;#039;&amp;#039; mit dem fully-qualified Pfad und dem Namen des Keystore, inklusive der .keystore extension. Es wird nach dem keystore Passwort gefragt und danach die Liste angezeigt.&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir folgendes eingeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
keytool -list -v -keystore your_keystore_name -alias your_alias_name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace your_keystore_name with the fully-qualified path and name of the keystore, including the .keystore extension. Replace your_alias_name with the alias that you assigned to the certificate when you created it.&lt;br /&gt;
&lt;br /&gt;
Caution: To protect your keystore and key, don&amp;#039;t enter the storepass or keypass arguments on the command line unless you&amp;#039;re confident of your computer&amp;#039;s security. For example, on a public computer, someone could look at your terminal window history or list of running processes, get the password, and then have write access to your signing certificate. This would allow that person to modify or replace your application with their own.&lt;br /&gt;
&lt;br /&gt;
You should see a display that is similar to this:&lt;br /&gt;
&lt;br /&gt;
 Alias name: &amp;lt;alias_name&amp;gt;&lt;br /&gt;
 Creation date: Feb 02, 2013&lt;br /&gt;
 Entry type: PrivateKeyEntry&lt;br /&gt;
 Certificate chain length: 1&lt;br /&gt;
 Certificate[1]:&lt;br /&gt;
 Owner: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Issuer: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Serial number: 4cc9b300&lt;br /&gt;
 Valid from: Mon Feb 02 08:01:04 UTC 2013 until: Mon Feb 02 18:05:04 PST 2033&lt;br /&gt;
 Certificate fingerprints:&lt;br /&gt;
      MD5:  AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6B:AC:F9&lt;br /&gt;
      SHA1: BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:90:AF:A1:66:6E:44:5D:75&lt;br /&gt;
      Signature algorithm name: SHA1withRSA&lt;br /&gt;
      Version: 3&lt;br /&gt;
The line that begins SHA1 contains the certificate&amp;#039;s SHA-1 fingerprint. The fingerprint is the sequence of 20 two-digit hexadecimal numbers separated by colons.&lt;br /&gt;
&lt;br /&gt;
===== Projekt in der Google APIs Console registrieren =====&lt;br /&gt;
and add the Maps API as a service for the project.&lt;br /&gt;
*Once you have a project set up, you can request one or more keys.&lt;br /&gt;
*Finally, you can add your key to your application and begin development.&lt;/div&gt;</summary>
		<author><name>87.180.99.32</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Android_Development&amp;diff=20018</id>
		<title>Android Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Android_Development&amp;diff=20018"/>
		<updated>2013-10-08T14:07:10Z</updated>

		<summary type="html">&lt;p&gt;87.180.99.32: /* Android Apps signieren und veröffentlichen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
* Android Developer Referenz von Google: http://developer.android.com/reference/packages.html&lt;br /&gt;
* http://www.vogella.com/articles/Android/article.html (umfassendes Tutorial gepflegt seit 2009 (Stand 2013))&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Referenz]]&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Snippets]]&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Maps]]&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Setting up PlayStore Service]]&lt;br /&gt;
&lt;br /&gt;
== Android Development - First Steps ==&lt;br /&gt;
[[Android Development - Hello World]]&lt;br /&gt;
&lt;br /&gt;
[[Android Development - User Interface programmieren]] (Layout anlegen)&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Grundfunktionen Programmieren]] (Neue Activity starten, Intents, Button und Textfelder)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Android Entwicklungsumgebung ==&lt;br /&gt;
=== Eclipse und Android SDK ===&lt;br /&gt;
Es gibt ein angepasstes Eclipse Paket mit den Android Tools auf http://developer.android.com/sdk/installing/index.html, das ist der schnellste Weg. Im Folgenden ein Beispiel für die klassische Installation, bei der wir alle Schritte nacheinander durchführen.&lt;br /&gt;
&lt;br /&gt;
==== Benötigte Komponenten ====&lt;br /&gt;
Im Einzelnen benötigt man über eine Eclipse / Java IDE noch:&lt;br /&gt;
* ADT plugin (Android Developer Tools)&lt;br /&gt;
* Android SDK Tools&lt;br /&gt;
* Android Platform-tools&lt;br /&gt;
* The latest Android platform&lt;br /&gt;
* The latest Android system image for the emulator&lt;br /&gt;
&lt;br /&gt;
==== Eclipse Installation ====&lt;br /&gt;
http://help.eclipse.org/juno/index.jsp&lt;br /&gt;
&lt;br /&gt;
* Download Eclipse (z.B. Classic)&lt;br /&gt;
* Download und Installation des Java JDK (Java Entwickler SDK)&lt;br /&gt;
* Registrieren des JDK in Eclipse (Preferences &amp;gt; Java &amp;gt; Installed JREs&lt;br /&gt;
==== Android SDK installieren ====&lt;br /&gt;
* Android SDK downloaden und installieren (benötigt JDK) Beim ersten Start fragt der SDK Manager welche Tools für welche Android Plattform man nachladen möchte. Wenn man mit Eclipse arbeitet sollte man den &amp;#039;&amp;#039;&amp;#039;Manager abbrechen&amp;#039;&amp;#039;&amp;#039; und dies später über das Eclipse Plugin machen.&lt;br /&gt;
==== ADT Plugin für Eclipse installieren ====&lt;br /&gt;
http://developer.android.com/sdk/installing/installing-adt.html&lt;br /&gt;
&lt;br /&gt;
* In Eclipse &amp;#039;&amp;#039;Help &amp;gt; Install New Software&amp;#039;&amp;#039;.&lt;br /&gt;
* Add Repository Dialog &amp;quot;&amp;#039;&amp;#039;ADT Plugin&amp;#039;&amp;#039;&amp;quot; als Name und folgende URL angeben:&lt;br /&gt;
 https://dl-ssl.google.com/android/eclipse/&lt;br /&gt;
Bei Problemen mit der Verbindunghttp verwenden.&lt;br /&gt;
* Developer Tools auswählen und die Installation fertigstellen.&lt;br /&gt;
* Nach der Installation Eclipse neu starten.&lt;br /&gt;
* Nach dem Neustart von Eclipse fragt das Plugin nach dem Ort des SDK (wenn er es noch nicht gefunden hat)&lt;br /&gt;
* Über Windows SDK-Manager können wir jetzt jederzeit die restlichen Android Komponenten laden die wir benötigen.&lt;br /&gt;
&lt;br /&gt;
== Android Apps signieren und veröffentlichen ==&lt;br /&gt;
http://developer.android.com/guide/topics/security/security.html&lt;br /&gt;
&lt;br /&gt;
Apps bekommen ein Sicherheitszertifikat mit dem sie vor dem veröffentlichen signiert werden. Diese &amp;#039;&amp;#039;&amp;#039;Signatur erstellt i.d.r. der Entwickler selbst&amp;#039;&amp;#039;&amp;#039;. Beim Debuggen erstellt Eclipse automatisch ein Testzertifikat. Für manche Anwendungen die einen API Key von Google benötigen muß man schon frühzeitig ein Release Zertifikat erstellen, das man bei Google Registrieren kann.&lt;br /&gt;
&lt;br /&gt;
===Ein selbst signiertes Release Zertifikat erstellen ===&lt;br /&gt;
Quelle: Buch Android Programmierung&lt;br /&gt;
&lt;br /&gt;
Sind Sie bereit, Ihren Code für die Veröffentlichung zu signieren? Zunächst erstellen Sie mit dem keytool-Befehl einen privaten Schlüssel:&lt;br /&gt;
 keytool -genkey -v -keystore my-release-key.keystore -alias alias_name \&lt;br /&gt;
  -keyalg RSA -keysize 2048 -validity 50000 &lt;br /&gt;
Für my-release-key können Sie einen Namen Ihrer Wahl angeben und für alias_name einen Alias Ihrer Wahl. Die Parameter -keysize und -validity sollten so bleiben wie im Code oben.&lt;br /&gt;
&lt;br /&gt;
==== Sicherheit ====&lt;br /&gt;
Sobald eine App mit dem Zertifikat veröffentlicht ist wird das Zertifikat unersetzlich.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie Ihr Signierzertifikat verlieren, verlieren Sie Ihre Identität für Android-Geräte und Google Play. Das heißt, dass Sie, obwohl Sie den gleichen Code wie zuvor kompilieren und veröffentlichen, die neu kompilierten Anwendungen nicht nutzen können, um bereits veröffentlichte Anwendungen zu aktualisieren, da weder Android-Geräte noch Google Play Sie als den App-Urheber wiedererkennen.&lt;br /&gt;
Bewahren Sie mehrere Sicherungskopien Ihres Signierzertifikats auf unterschiedlichen Typen von Medien (auch auf Papier) an verschiedenen Orten auf. Und sorgen Sie dafür, dass diese Sicherungskopien sicher sind. Wenn Ihr Signierzertifikat von anderen als Ihnen selbst genutzt wird, können diese Leute Ihre Programme auf den Android-Geräten Ihrer Benutzer ändern.&lt;br /&gt;
Ausführliche Empfehlungen von der Android-Entwicklerseite zur Sicherung Ihres Signierzertifikats finden Sie unter http://developer.android.com/guide/publishing/app-signing.html#secure-key.&lt;br /&gt;
&lt;br /&gt;
Bevor die App veröffentlicht ist kann man die Signatur jederzeit wegwerfen und erneuern.&lt;br /&gt;
&lt;br /&gt;
=== Google Maps API Key ===&lt;br /&gt;
* Notwendig für Zugriffe auf den Google Maps Kartenserver. &lt;br /&gt;
* Alle Android Apps müssen mit einem digitalen Zertifikat signiert werden für das der Entwickler den private key hat. Damit werden die Apps auf dem Map-Server oder im PlayStore getrackt.&lt;br /&gt;
* Man benötigt einen Schlüssel für jedes Zertifikat&lt;br /&gt;
* In der Praxis erstellt man ein Zertifikat für jede App (theoretisch kann man auch mehrere mit einem Zertifikat signieren)&lt;br /&gt;
* Für die Entwicklung nutzt Eclipse ein Entwickler Zertifikat ohne API Key dies reicht nicht bei Apps die einen Maps API Key benötigen&lt;br /&gt;
=== Google Maps API Key erstellen ===&lt;br /&gt;
==== Google Play Services Installieren ====&lt;br /&gt;
Dieses SDK benötigt man um einen Key zu holen (Dieser Schritt muß nur einmal gemacht werden)&lt;br /&gt;
* Android SDK aus Eclipse oder über Terminal starten.(On Mac or Linux,  tools/ directory Befehl: android sdk)&lt;br /&gt;
* Im Android SDK Extras &amp;gt; Google Play services SDK installieren&lt;br /&gt;
==== App Zertifikat Fingerprint anzeigen ====&lt;br /&gt;
Es gibt Debug Zertifikate und Release Zertifikate. Das Debug Zertifikat wird von Eclipse automatisch beim Debuggen der App erstellt. Um den passenden Key zu bekommen braucht man den Fingerprint des gewünschten  Zertifikats.&lt;br /&gt;
===== Debug Zertifikat Fingerprint =====&lt;br /&gt;
Die Zertifikate kann man aus dem debug keystore file auslesen. Es nennt sich debug.keystore und wird beim ersten erstellen des Projekts erzeugt. Es befindet sich im gleichen Verzeichnis wie die Android Virtual Device (AVD) Dateien. Unter Mac ist das:&lt;br /&gt;
 ~/.android/&lt;br /&gt;
Windows Vista and Windows 7: &lt;br /&gt;
 C:\Users\your_user_name\.android\&lt;br /&gt;
In Eclipse kann man den Ort mit &lt;br /&gt;
 Windows &amp;gt; Prefs &amp;gt; Android &amp;gt; Build &lt;br /&gt;
Anzeigen lassen (dann kopieren und in den Finder kopieren.&lt;br /&gt;
&lt;br /&gt;
List the SHA-1 fingerprint im Terminal:&lt;br /&gt;
&lt;br /&gt;
 keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android&lt;br /&gt;
Ausgabe sieht etwa so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Alias name: androiddebugkey&lt;br /&gt;
 Creation date: Jan 01, 2013&lt;br /&gt;
 Entry type: PrivateKeyEntry&lt;br /&gt;
 Certificate chain length: 1&lt;br /&gt;
 Certificate[1]:&lt;br /&gt;
 Owner: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Issuer: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Serial number: 4aa9b300&lt;br /&gt;
 Valid from: Mon Jan 01 08:04:04 UTC 2013 until: Mon Jan 01 18:04:04 PST 2033&lt;br /&gt;
 Certificate fingerprints:&lt;br /&gt;
      MD5:  AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6A:AC:F9&lt;br /&gt;
      SHA1: BB:0D:AC:74:D3:21:E1:43:07:71:9B:62:90:AF:A1:66:6E:44:5D:75&lt;br /&gt;
      Signature algorithm name: SHA1withRSA&lt;br /&gt;
      Version: 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Zeile mit SHA1 enthält den fingerprint, eine Sequenz von 20 two-digit hexadecimal numbers separated by colons.&lt;br /&gt;
&lt;br /&gt;
===== Release Zertifikat anzeigen =====&lt;br /&gt;
Auch hier muß man das release certificate keystore file finden, dies ist jedoch nicht immer am gleichen Ort. Man kann einen Ort festlegen, wenn man das release build für die App macht. Wenn man es nicht macht bleibt die App unsigniert und man kann Sie beim Publizieren Signieren. Da wir aber den API Key brauchen geht das in diesem Fall nicht.&lt;br /&gt;
&lt;br /&gt;
Für das release Zertifikat braucht man auch den certificate&amp;#039;s alias und die Passwörter für den keystore und das Zertifikat.&lt;br /&gt;
&lt;br /&gt;
So kann man die Alias Liste für alle Keys im Keystore anzeigen:&lt;br /&gt;
&lt;br /&gt;
 keytool -list -keystore your_keystore_name&lt;br /&gt;
Ersetze &amp;#039;&amp;#039;your_keystore_name&amp;#039;&amp;#039; mit dem fully-qualified Pfad und dem Namen des Keystore, inklusive der .keystore extension. Es wird nach dem keystore Passwort gefragt und danach die Liste angezeigt.&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir folgendes eingeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
keytool -list -v -keystore your_keystore_name -alias your_alias_name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace your_keystore_name with the fully-qualified path and name of the keystore, including the .keystore extension. Replace your_alias_name with the alias that you assigned to the certificate when you created it.&lt;br /&gt;
&lt;br /&gt;
Caution: To protect your keystore and key, don&amp;#039;t enter the storepass or keypass arguments on the command line unless you&amp;#039;re confident of your computer&amp;#039;s security. For example, on a public computer, someone could look at your terminal window history or list of running processes, get the password, and then have write access to your signing certificate. This would allow that person to modify or replace your application with their own.&lt;br /&gt;
&lt;br /&gt;
You should see a display that is similar to this:&lt;br /&gt;
&lt;br /&gt;
 Alias name: &amp;lt;alias_name&amp;gt;&lt;br /&gt;
 Creation date: Feb 02, 2013&lt;br /&gt;
 Entry type: PrivateKeyEntry&lt;br /&gt;
 Certificate chain length: 1&lt;br /&gt;
 Certificate[1]:&lt;br /&gt;
 Owner: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Issuer: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Serial number: 4cc9b300&lt;br /&gt;
 Valid from: Mon Feb 02 08:01:04 UTC 2013 until: Mon Feb 02 18:05:04 PST 2033&lt;br /&gt;
 Certificate fingerprints:&lt;br /&gt;
      MD5:  AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6B:AC:F9&lt;br /&gt;
      SHA1: BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:90:AF:A1:66:6E:44:5D:75&lt;br /&gt;
      Signature algorithm name: SHA1withRSA&lt;br /&gt;
      Version: 3&lt;br /&gt;
The line that begins SHA1 contains the certificate&amp;#039;s SHA-1 fingerprint. The fingerprint is the sequence of 20 two-digit hexadecimal numbers separated by colons.&lt;br /&gt;
&lt;br /&gt;
===== Projekt in der Google APIs Console registrieren =====&lt;br /&gt;
and add the Maps API as a service for the project.&lt;br /&gt;
*Once you have a project set up, you can request one or more keys.&lt;br /&gt;
*Finally, you can add your key to your application and begin development.&lt;/div&gt;</summary>
		<author><name>87.180.99.32</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Android_Development&amp;diff=20017</id>
		<title>Android Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Android_Development&amp;diff=20017"/>
		<updated>2013-10-08T13:54:00Z</updated>

		<summary type="html">&lt;p&gt;87.180.99.32: /* Android Entwicklungsumgebung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
* Android Developer Referenz von Google: http://developer.android.com/reference/packages.html&lt;br /&gt;
* http://www.vogella.com/articles/Android/article.html (umfassendes Tutorial gepflegt seit 2009 (Stand 2013))&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Referenz]]&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Snippets]]&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Maps]]&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Setting up PlayStore Service]]&lt;br /&gt;
&lt;br /&gt;
== Android Development - First Steps ==&lt;br /&gt;
[[Android Development - Hello World]]&lt;br /&gt;
&lt;br /&gt;
[[Android Development - User Interface programmieren]] (Layout anlegen)&lt;br /&gt;
&lt;br /&gt;
[[Android Development - Grundfunktionen Programmieren]] (Neue Activity starten, Intents, Button und Textfelder)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Android Entwicklungsumgebung ==&lt;br /&gt;
=== Eclipse und Android SDK ===&lt;br /&gt;
Es gibt ein angepasstes Eclipse Paket mit den Android Tools auf http://developer.android.com/sdk/installing/index.html, das ist der schnellste Weg. Im Folgenden ein Beispiel für die klassische Installation, bei der wir alle Schritte nacheinander durchführen.&lt;br /&gt;
&lt;br /&gt;
==== Benötigte Komponenten ====&lt;br /&gt;
Im Einzelnen benötigt man über eine Eclipse / Java IDE noch:&lt;br /&gt;
* ADT plugin (Android Developer Tools)&lt;br /&gt;
* Android SDK Tools&lt;br /&gt;
* Android Platform-tools&lt;br /&gt;
* The latest Android platform&lt;br /&gt;
* The latest Android system image for the emulator&lt;br /&gt;
&lt;br /&gt;
==== Eclipse Installation ====&lt;br /&gt;
http://help.eclipse.org/juno/index.jsp&lt;br /&gt;
&lt;br /&gt;
* Download Eclipse (z.B. Classic)&lt;br /&gt;
* Download und Installation des Java JDK (Java Entwickler SDK)&lt;br /&gt;
* Registrieren des JDK in Eclipse (Preferences &amp;gt; Java &amp;gt; Installed JREs&lt;br /&gt;
==== Android SDK installieren ====&lt;br /&gt;
* Android SDK downloaden und installieren (benötigt JDK) Beim ersten Start fragt der SDK Manager welche Tools für welche Android Plattform man nachladen möchte. Wenn man mit Eclipse arbeitet sollte man den &amp;#039;&amp;#039;&amp;#039;Manager abbrechen&amp;#039;&amp;#039;&amp;#039; und dies später über das Eclipse Plugin machen.&lt;br /&gt;
==== ADT Plugin für Eclipse installieren ====&lt;br /&gt;
http://developer.android.com/sdk/installing/installing-adt.html&lt;br /&gt;
&lt;br /&gt;
* In Eclipse &amp;#039;&amp;#039;Help &amp;gt; Install New Software&amp;#039;&amp;#039;.&lt;br /&gt;
* Add Repository Dialog &amp;quot;&amp;#039;&amp;#039;ADT Plugin&amp;#039;&amp;#039;&amp;quot; als Name und folgende URL angeben:&lt;br /&gt;
 https://dl-ssl.google.com/android/eclipse/&lt;br /&gt;
Bei Problemen mit der Verbindunghttp verwenden.&lt;br /&gt;
* Developer Tools auswählen und die Installation fertigstellen.&lt;br /&gt;
* Nach der Installation Eclipse neu starten.&lt;br /&gt;
* Nach dem Neustart von Eclipse fragt das Plugin nach dem Ort des SDK (wenn er es noch nicht gefunden hat)&lt;br /&gt;
* Über Windows SDK-Manager können wir jetzt jederzeit die restlichen Android Komponenten laden die wir benötigen.&lt;br /&gt;
&lt;br /&gt;
== Android Apps signieren und veröffentlichen ==&lt;br /&gt;
=== Google Maps API Key ===&lt;br /&gt;
* Notwendig für Zugriffe auf den Google Maps Kartenserver. &lt;br /&gt;
* Alle Android Apps müssen mit einem digitalen Zertifikat signiert werden für das der Entwickler den private key hat. Damit werden die Apps auf dem Map-Server oder im PlayStore getrackt.&lt;br /&gt;
* Man benötigt einen Schlüssel für jedes Zertifikat&lt;br /&gt;
* In der Praxis erstellt man ein Zertifikat für jede App (theoretisch kann man auch mehrere mit einem Zertifikat signieren)&lt;br /&gt;
* Für die Entwicklung nutzt Eclipse ein Entwickler Zertifikat ohne API Key dies reicht nicht bei Apps die einen Maps API Key benötigen&lt;br /&gt;
=== Google Maps API Key erstellen ===&lt;br /&gt;
==== Google Play Services Installieren ====&lt;br /&gt;
Dieses SDK benötigt man um einen Key zu holen (Dieser Schritt muß nur einmal gemacht werden)&lt;br /&gt;
* Android SDK aus Eclipse oder über Terminal starten.(On Mac or Linux,  tools/ directory Befehl: android sdk)&lt;br /&gt;
* Im Android SDK Extras &amp;gt; Google Play services SDK installieren&lt;br /&gt;
==== App Zertifikat Fingerprint anzeigen ====&lt;br /&gt;
Es gibt Debug Zertifikate und Release Zertifikate. Das Debug Zertifikat wird von Eclipse automatisch beim Debuggen der App erstellt. Um den passenden Key zu bekommen braucht man den Fingerprint des gewünschten  Zertifikats.&lt;br /&gt;
===== Debug Zertifikat Fingerprint =====&lt;br /&gt;
Die Zertifikate kann man aus dem debug keystore file auslesen. Es nennt sich debug.keystore und wird beim ersten erstellen des Projekts erzeugt. Es befindet sich im gleichen Verzeichnis wie die Android Virtual Device (AVD) Dateien. Unter Mac ist das:&lt;br /&gt;
 ~/.android/&lt;br /&gt;
Windows Vista and Windows 7: &lt;br /&gt;
 C:\Users\your_user_name\.android\&lt;br /&gt;
In Eclipse kann man den Ort mit &lt;br /&gt;
 Windows &amp;gt; Prefs &amp;gt; Android &amp;gt; Build &lt;br /&gt;
Anzeigen lassen (dann kopieren und in den Finder kopieren.&lt;br /&gt;
&lt;br /&gt;
List the SHA-1 fingerprint im Terminal:&lt;br /&gt;
&lt;br /&gt;
 keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android&lt;br /&gt;
Ausgabe sieht etwa so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Alias name: androiddebugkey&lt;br /&gt;
 Creation date: Jan 01, 2013&lt;br /&gt;
 Entry type: PrivateKeyEntry&lt;br /&gt;
 Certificate chain length: 1&lt;br /&gt;
 Certificate[1]:&lt;br /&gt;
 Owner: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Issuer: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Serial number: 4aa9b300&lt;br /&gt;
 Valid from: Mon Jan 01 08:04:04 UTC 2013 until: Mon Jan 01 18:04:04 PST 2033&lt;br /&gt;
 Certificate fingerprints:&lt;br /&gt;
      MD5:  AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6A:AC:F9&lt;br /&gt;
      SHA1: BB:0D:AC:74:D3:21:E1:43:07:71:9B:62:90:AF:A1:66:6E:44:5D:75&lt;br /&gt;
      Signature algorithm name: SHA1withRSA&lt;br /&gt;
      Version: 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Zeile mit SHA1 enthält den fingerprint, eine Sequenz von 20 two-digit hexadecimal numbers separated by colons.&lt;br /&gt;
&lt;br /&gt;
===== Release Zertifikat anzeigen =====&lt;br /&gt;
Auch hier muß man das release certificate keystore file finden, dies ist jedoch nicht immer am gleichen Ort. Man kann einen Ort festlegen, wenn man das release build für die App macht. Wenn man es nicht macht bleibt die App unsigniert und man kann Sie beim Publizieren Signieren. Da wir aber den API Key brauchen geht das in diesem Fall nicht.&lt;br /&gt;
&lt;br /&gt;
Für das release Zertifikat braucht man auch den certificate&amp;#039;s alias und die Passwörter für den keystore und das Zertifikat.&lt;br /&gt;
&lt;br /&gt;
So kann man die Alias Liste für alle Keys im Keystore anzeigen:&lt;br /&gt;
&lt;br /&gt;
 keytool -list -keystore your_keystore_name&lt;br /&gt;
Ersetze &amp;#039;&amp;#039;your_keystore_name&amp;#039;&amp;#039; mit dem fully-qualified Pfad und dem Namen des Keystore, inklusive der .keystore extension. Es wird nach dem keystore Passwort gefragt und danach die Liste angezeigt.&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir folgendes eingeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
keytool -list -v -keystore your_keystore_name -alias your_alias_name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace your_keystore_name with the fully-qualified path and name of the keystore, including the .keystore extension. Replace your_alias_name with the alias that you assigned to the certificate when you created it.&lt;br /&gt;
&lt;br /&gt;
Caution: To protect your keystore and key, don&amp;#039;t enter the storepass or keypass arguments on the command line unless you&amp;#039;re confident of your computer&amp;#039;s security. For example, on a public computer, someone could look at your terminal window history or list of running processes, get the password, and then have write access to your signing certificate. This would allow that person to modify or replace your application with their own.&lt;br /&gt;
&lt;br /&gt;
You should see a display that is similar to this:&lt;br /&gt;
&lt;br /&gt;
 Alias name: &amp;lt;alias_name&amp;gt;&lt;br /&gt;
 Creation date: Feb 02, 2013&lt;br /&gt;
 Entry type: PrivateKeyEntry&lt;br /&gt;
 Certificate chain length: 1&lt;br /&gt;
 Certificate[1]:&lt;br /&gt;
 Owner: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Issuer: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Serial number: 4cc9b300&lt;br /&gt;
 Valid from: Mon Feb 02 08:01:04 UTC 2013 until: Mon Feb 02 18:05:04 PST 2033&lt;br /&gt;
 Certificate fingerprints:&lt;br /&gt;
      MD5:  AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6B:AC:F9&lt;br /&gt;
      SHA1: BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:90:AF:A1:66:6E:44:5D:75&lt;br /&gt;
      Signature algorithm name: SHA1withRSA&lt;br /&gt;
      Version: 3&lt;br /&gt;
The line that begins SHA1 contains the certificate&amp;#039;s SHA-1 fingerprint. The fingerprint is the sequence of 20 two-digit hexadecimal numbers separated by colons.&lt;br /&gt;
&lt;br /&gt;
===== Projekt in der Google APIs Console registrieren =====&lt;br /&gt;
and add the Maps API as a service for the project.&lt;br /&gt;
*Once you have a project set up, you can request one or more keys.&lt;br /&gt;
*Finally, you can add your key to your application and begin development.&lt;/div&gt;</summary>
		<author><name>87.180.99.32</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Android_Location_API&amp;diff=20016</id>
		<title>Android Location API</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Android_Location_API&amp;diff=20016"/>
		<updated>2013-10-08T13:53:44Z</updated>

		<summary type="html">&lt;p&gt;87.180.99.32: /* Links und Quellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links und Quellen ==&lt;br /&gt;
http://www.vogella.com/articles/AndroidLocationAPI/article.html&lt;br /&gt;
&lt;br /&gt;
http://developer.android.com/reference/android/location/package-summary.html&lt;br /&gt;
&lt;br /&gt;
== Position bestimmen ==&lt;br /&gt;
Android kann die Position mit dem GPS Empfänger, über umgebende WLAN Netzwerke (die dann Online mit einer Google Datenbank abgeglichen werden) oder über die aktuelle Handyzelle bestimmen.&lt;br /&gt;
&lt;br /&gt;
Für die Positionsbestimmung stellt Android das Package:&lt;br /&gt;
 android.location&lt;br /&gt;
zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
=== Wichtige Komponenten ===&lt;br /&gt;
==== Location Manager ====&lt;br /&gt;
&amp;#039;&amp;#039;Class LocationManager&amp;#039;&amp;#039; für Zugriff auf Android location service&lt;br /&gt;
====LocationProvider====&lt;br /&gt;
Superclass für die LocationProvider die die Position liefern. Es gibt 3:&lt;br /&gt;
 network //Mobile oder WiFi&lt;br /&gt;
 gps&lt;br /&gt;
 passive // für externe Geräte&lt;br /&gt;
====LocationListener====&lt;br /&gt;
Über den Location Manager kann man einen LocationListener registrieren um regelmäßige Positionsupdates zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Hinweis in Stackoverflow wird über Probleme mit dem onStatusChanged Listener auf diversen Versionen von Android s.u.&lt;br /&gt;
&lt;br /&gt;
==== Criteria Objekt zur Provider Auswahl ====&lt;br /&gt;
Mit einem Criteria Objekt bleibt man flexibel bei der Auswahl des Providers (GPS, Netzwerk...)&lt;br /&gt;
&lt;br /&gt;
Im Criteria Objekt werden Anforderungen zum Beispiel für die Genauigkeit des Ortes gesetzt und diese anschließend bei der Providerauswahl übergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    Criteria criteria = new Criteria(); // Default Settings können über set Methoden verändert werden&lt;br /&gt;
    provider = locationManager.getBestProvider(criteria, false); // Provider mit Kriterien auswählen false bedeutet auch nicht aktivierte Provider werden berücksichtigt.&lt;br /&gt;
    Location location = locationManager.getLastKnownLocation(provider);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Geocoder ====&lt;br /&gt;
Über die Geocoder Klasse kann man Positionsdaten zu Adressdaten und umgekehrt ermitteln (Google Service)&lt;br /&gt;
==== Notwendige Rechte / Permissions ====&lt;br /&gt;
ACCESS_FINE_LOCATION permission für GPS, ansonsten ACCESS_COARSE_LOCATION permission&lt;br /&gt;
=== Beispiel 1 - locationapi.simple ===&lt;br /&gt;
[[Android Location API - Simple Location]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Location Snippets ===&lt;br /&gt;
==== User zum aktivieren von GPS auffordern ====&lt;br /&gt;
Hinweis: Es ist nicht möglich GPS nur über den Code zu starten. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);&lt;br /&gt;
boolean enabled = service&lt;br /&gt;
  .isProviderEnabled(LocationManager.GPS_PROVIDER);&lt;br /&gt;
&lt;br /&gt;
// Check if enabled and if not send user to the GSP settings&lt;br /&gt;
// Better solution would be to display a dialog (AlarmDialog) and suggesting to &lt;br /&gt;
// go to the settings&lt;br /&gt;
if (!enabled) {&lt;br /&gt;
  Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);&lt;br /&gt;
  startActivity(intent);&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Simulation auf dem Simulator ===&lt;br /&gt;
Auf dem Emulierten Device GoogleMaps aktivieren falls das aktivieren des GPS Simulators nicht klappt (Bugs). Man kann die DDMS Perspective von Eclipse nehmen um Geopositionen zu senden.&lt;br /&gt;
&lt;br /&gt;
 Window &amp;gt; Open Perspective &amp;gt; Other &amp;gt; DDMS&lt;br /&gt;
&lt;br /&gt;
Über das Terinal und Telnet kann man auch Positionen schicken&lt;br /&gt;
 telnet localhost 5554&lt;br /&gt;
 geo fix 13.12 49.23&lt;br /&gt;
&lt;br /&gt;
=== Probleme bei der Positionsabfrage umgehen ===&lt;br /&gt;
Quelle: http://stackoverflow.com/questions/2021176/how-can-i-check-the-current-status-of-the-gps-receiver&lt;br /&gt;
&lt;br /&gt;
onStatusChanged() doesn&amp;#039;t get called on Eclair and Froyo. It does get called on 1.6 though.&lt;br /&gt;
Simply counting all available satellites is, of course, useless.&lt;br /&gt;
Checking if any of the satellites returns true for usedInFix() isn&amp;#039;t very helpful also. The system apparently loses the fix but still continue to report that there are several sats that are used in it.&lt;br /&gt;
So, the only working solution we have, and the one we actually use in our application, is the following. Let&amp;#039;s say we have this simple class that implements the GpsStatus.Listener:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
private class MyGPSListener implements GpsStatus.Listener {&lt;br /&gt;
    public void onGpsStatusChanged(int event) {&lt;br /&gt;
        switch (event) {&lt;br /&gt;
            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:&lt;br /&gt;
                if (mLastLocation != null)&lt;br /&gt;
                    isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) &amp;lt; 3000;&lt;br /&gt;
&lt;br /&gt;
                if (isGPSFix) { // A fix has been acquired.&lt;br /&gt;
                    // Do something.&lt;br /&gt;
                } else { // The fix has been lost.&lt;br /&gt;
                    // Do something.&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                break;&lt;br /&gt;
            case GpsStatus.GPS_EVENT_FIRST_FIX:&lt;br /&gt;
                // Do something.&lt;br /&gt;
                isGPSFix = true;&lt;br /&gt;
&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
OK, now in onLocationChanged() you should add the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public void onLocationChanged(Location location) {&lt;br /&gt;
    if (location == null) return;&lt;br /&gt;
&lt;br /&gt;
    mLastLocationMillis = SystemClock.elapsedRealtime();&lt;br /&gt;
&lt;br /&gt;
    // Do something.&lt;br /&gt;
&lt;br /&gt;
    mLastLocation = location;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And that&amp;#039;s it. Basically, this is the line that does it all:&lt;br /&gt;
&lt;br /&gt;
 isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) &amp;lt; 3000;&lt;br /&gt;
&lt;br /&gt;
You can tweak the milliseconds value of course, but I would suggest to set it around 3-5 seconds.&lt;br /&gt;
&lt;br /&gt;
This actually works and though I haven&amp;#039;t seen the source code that implements the standard GPS icon, this comes close to replicating its behavior. It could even outdo it lol. Hope this helps someone.&lt;/div&gt;</summary>
		<author><name>87.180.99.32</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Android_Location_API&amp;diff=20015</id>
		<title>Android Location API</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Android_Location_API&amp;diff=20015"/>
		<updated>2013-10-08T13:52:57Z</updated>

		<summary type="html">&lt;p&gt;87.180.99.32: /* Debug Zertifikat Fingerprint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links und Quellen ==&lt;br /&gt;
http://www.vogella.com/articles/AndroidLocationAPI/article.html&lt;br /&gt;
&lt;br /&gt;
http://developer.android.com/reference/android/location/package-summary.html&lt;br /&gt;
&lt;br /&gt;
=== Google Maps API Key ===&lt;br /&gt;
* Notwendig für Zugriffe auf den Google Maps Kartenserver. &lt;br /&gt;
* Alle Android Apps müssen mit einem digitalen Zertifikat signiert werden für das der Entwickler den private key hat. Damit werden die Apps auf dem Map-Server oder im PlayStore getrackt.&lt;br /&gt;
* Man benötigt einen Schlüssel für jedes Zertifikat&lt;br /&gt;
* In der Praxis erstellt man ein Zertifikat für jede App (theoretisch kann man auch mehrere mit einem Zertifikat signieren)&lt;br /&gt;
* Für die Entwicklung nutzt Eclipse ein Entwickler Zertifikat ohne API Key dies reicht nicht bei Apps die einen Maps API Key benötigen&lt;br /&gt;
=== Google Maps API Key erstellen ===&lt;br /&gt;
==== Google Play Services Installieren ====&lt;br /&gt;
Dieses SDK benötigt man um einen Key zu holen (Dieser Schritt muß nur einmal gemacht werden)&lt;br /&gt;
* Android SDK aus Eclipse oder über Terminal starten.(On Mac or Linux,  tools/ directory Befehl: android sdk)&lt;br /&gt;
* Im Android SDK Extras &amp;gt; Google Play services SDK installieren&lt;br /&gt;
==== App Zertifikat Fingerprint anzeigen ====&lt;br /&gt;
Es gibt Debug Zertifikate und Release Zertifikate. Das Debug Zertifikat wird von Eclipse automatisch beim Debuggen der App erstellt. Um den passenden Key zu bekommen braucht man den Fingerprint des gewünschten  Zertifikats.&lt;br /&gt;
===== Debug Zertifikat Fingerprint =====&lt;br /&gt;
Die Zertifikate kann man aus dem debug keystore file auslesen. Es nennt sich debug.keystore und wird beim ersten erstellen des Projekts erzeugt. Es befindet sich im gleichen Verzeichnis wie die Android Virtual Device (AVD) Dateien. Unter Mac ist das:&lt;br /&gt;
 ~/.android/&lt;br /&gt;
Windows Vista and Windows 7: &lt;br /&gt;
 C:\Users\your_user_name\.android\&lt;br /&gt;
In Eclipse kann man den Ort mit &lt;br /&gt;
 Windows &amp;gt; Prefs &amp;gt; Android &amp;gt; Build &lt;br /&gt;
Anzeigen lassen (dann kopieren und in den Finder kopieren.&lt;br /&gt;
&lt;br /&gt;
List the SHA-1 fingerprint im Terminal:&lt;br /&gt;
&lt;br /&gt;
 keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android&lt;br /&gt;
Ausgabe sieht etwa so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Alias name: androiddebugkey&lt;br /&gt;
 Creation date: Jan 01, 2013&lt;br /&gt;
 Entry type: PrivateKeyEntry&lt;br /&gt;
 Certificate chain length: 1&lt;br /&gt;
 Certificate[1]:&lt;br /&gt;
 Owner: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Issuer: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Serial number: 4aa9b300&lt;br /&gt;
 Valid from: Mon Jan 01 08:04:04 UTC 2013 until: Mon Jan 01 18:04:04 PST 2033&lt;br /&gt;
 Certificate fingerprints:&lt;br /&gt;
      MD5:  AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6A:AC:F9&lt;br /&gt;
      SHA1: BB:0D:AC:74:D3:21:E1:43:07:71:9B:62:90:AF:A1:66:6E:44:5D:75&lt;br /&gt;
      Signature algorithm name: SHA1withRSA&lt;br /&gt;
      Version: 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Zeile mit SHA1 enthält den fingerprint, eine Sequenz von 20 two-digit hexadecimal numbers separated by colons.&lt;br /&gt;
&lt;br /&gt;
===== Release Zertifikat anzeigen =====&lt;br /&gt;
Auch hier muß man das release certificate keystore file finden, dies ist jedoch nicht immer am gleichen Ort. Man kann einen Ort festlegen, wenn man das release build für die App macht. Wenn man es nicht macht bleibt die App unsigniert und man kann Sie beim Publizieren Signieren. Da wir aber den API Key brauchen geht das in diesem Fall nicht.&lt;br /&gt;
&lt;br /&gt;
Für das release Zertifikat braucht man auch den certificate&amp;#039;s alias und die Passwörter für den keystore und das Zertifikat.&lt;br /&gt;
&lt;br /&gt;
So kann man die Alias Liste für alle Keys im Keystore anzeigen:&lt;br /&gt;
&lt;br /&gt;
 keytool -list -keystore your_keystore_name&lt;br /&gt;
Ersetze &amp;#039;&amp;#039;your_keystore_name&amp;#039;&amp;#039; mit dem fully-qualified Pfad und dem Namen des Keystore, inklusive der .keystore extension. Es wird nach dem keystore Passwort gefragt und danach die Liste angezeigt.&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir folgendes eingeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
keytool -list -v -keystore your_keystore_name -alias your_alias_name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace your_keystore_name with the fully-qualified path and name of the keystore, including the .keystore extension. Replace your_alias_name with the alias that you assigned to the certificate when you created it.&lt;br /&gt;
&lt;br /&gt;
Caution: To protect your keystore and key, don&amp;#039;t enter the storepass or keypass arguments on the command line unless you&amp;#039;re confident of your computer&amp;#039;s security. For example, on a public computer, someone could look at your terminal window history or list of running processes, get the password, and then have write access to your signing certificate. This would allow that person to modify or replace your application with their own.&lt;br /&gt;
&lt;br /&gt;
You should see a display that is similar to this:&lt;br /&gt;
&lt;br /&gt;
 Alias name: &amp;lt;alias_name&amp;gt;&lt;br /&gt;
 Creation date: Feb 02, 2013&lt;br /&gt;
 Entry type: PrivateKeyEntry&lt;br /&gt;
 Certificate chain length: 1&lt;br /&gt;
 Certificate[1]:&lt;br /&gt;
 Owner: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Issuer: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Serial number: 4cc9b300&lt;br /&gt;
 Valid from: Mon Feb 02 08:01:04 UTC 2013 until: Mon Feb 02 18:05:04 PST 2033&lt;br /&gt;
 Certificate fingerprints:&lt;br /&gt;
      MD5:  AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6B:AC:F9&lt;br /&gt;
      SHA1: BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:90:AF:A1:66:6E:44:5D:75&lt;br /&gt;
      Signature algorithm name: SHA1withRSA&lt;br /&gt;
      Version: 3&lt;br /&gt;
The line that begins SHA1 contains the certificate&amp;#039;s SHA-1 fingerprint. The fingerprint is the sequence of 20 two-digit hexadecimal numbers separated by colons.&lt;br /&gt;
&lt;br /&gt;
===== Projekt in der Google APIs Console registrieren =====&lt;br /&gt;
and add the Maps API as a service for the project.&lt;br /&gt;
*Once you have a project set up, you can request one or more keys.&lt;br /&gt;
*Finally, you can add your key to your application and begin development.&lt;br /&gt;
&lt;br /&gt;
== Position bestimmen ==&lt;br /&gt;
Android kann die Position mit dem GPS Empfänger, über umgebende WLAN Netzwerke (die dann Online mit einer Google Datenbank abgeglichen werden) oder über die aktuelle Handyzelle bestimmen.&lt;br /&gt;
&lt;br /&gt;
Für die Positionsbestimmung stellt Android das Package:&lt;br /&gt;
 android.location&lt;br /&gt;
zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
=== Wichtige Komponenten ===&lt;br /&gt;
==== Location Manager ====&lt;br /&gt;
&amp;#039;&amp;#039;Class LocationManager&amp;#039;&amp;#039; für Zugriff auf Android location service&lt;br /&gt;
====LocationProvider====&lt;br /&gt;
Superclass für die LocationProvider die die Position liefern. Es gibt 3:&lt;br /&gt;
 network //Mobile oder WiFi&lt;br /&gt;
 gps&lt;br /&gt;
 passive // für externe Geräte&lt;br /&gt;
====LocationListener====&lt;br /&gt;
Über den Location Manager kann man einen LocationListener registrieren um regelmäßige Positionsupdates zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Hinweis in Stackoverflow wird über Probleme mit dem onStatusChanged Listener auf diversen Versionen von Android s.u.&lt;br /&gt;
&lt;br /&gt;
==== Criteria Objekt zur Provider Auswahl ====&lt;br /&gt;
Mit einem Criteria Objekt bleibt man flexibel bei der Auswahl des Providers (GPS, Netzwerk...)&lt;br /&gt;
&lt;br /&gt;
Im Criteria Objekt werden Anforderungen zum Beispiel für die Genauigkeit des Ortes gesetzt und diese anschließend bei der Providerauswahl übergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    Criteria criteria = new Criteria(); // Default Settings können über set Methoden verändert werden&lt;br /&gt;
    provider = locationManager.getBestProvider(criteria, false); // Provider mit Kriterien auswählen false bedeutet auch nicht aktivierte Provider werden berücksichtigt.&lt;br /&gt;
    Location location = locationManager.getLastKnownLocation(provider);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Geocoder ====&lt;br /&gt;
Über die Geocoder Klasse kann man Positionsdaten zu Adressdaten und umgekehrt ermitteln (Google Service)&lt;br /&gt;
==== Notwendige Rechte / Permissions ====&lt;br /&gt;
ACCESS_FINE_LOCATION permission für GPS, ansonsten ACCESS_COARSE_LOCATION permission&lt;br /&gt;
=== Beispiel 1 - locationapi.simple ===&lt;br /&gt;
[[Android Location API - Simple Location]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Location Snippets ===&lt;br /&gt;
==== User zum aktivieren von GPS auffordern ====&lt;br /&gt;
Hinweis: Es ist nicht möglich GPS nur über den Code zu starten. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);&lt;br /&gt;
boolean enabled = service&lt;br /&gt;
  .isProviderEnabled(LocationManager.GPS_PROVIDER);&lt;br /&gt;
&lt;br /&gt;
// Check if enabled and if not send user to the GSP settings&lt;br /&gt;
// Better solution would be to display a dialog (AlarmDialog) and suggesting to &lt;br /&gt;
// go to the settings&lt;br /&gt;
if (!enabled) {&lt;br /&gt;
  Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);&lt;br /&gt;
  startActivity(intent);&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Simulation auf dem Simulator ===&lt;br /&gt;
Auf dem Emulierten Device GoogleMaps aktivieren falls das aktivieren des GPS Simulators nicht klappt (Bugs). Man kann die DDMS Perspective von Eclipse nehmen um Geopositionen zu senden.&lt;br /&gt;
&lt;br /&gt;
 Window &amp;gt; Open Perspective &amp;gt; Other &amp;gt; DDMS&lt;br /&gt;
&lt;br /&gt;
Über das Terinal und Telnet kann man auch Positionen schicken&lt;br /&gt;
 telnet localhost 5554&lt;br /&gt;
 geo fix 13.12 49.23&lt;br /&gt;
&lt;br /&gt;
=== Probleme bei der Positionsabfrage umgehen ===&lt;br /&gt;
Quelle: http://stackoverflow.com/questions/2021176/how-can-i-check-the-current-status-of-the-gps-receiver&lt;br /&gt;
&lt;br /&gt;
onStatusChanged() doesn&amp;#039;t get called on Eclair and Froyo. It does get called on 1.6 though.&lt;br /&gt;
Simply counting all available satellites is, of course, useless.&lt;br /&gt;
Checking if any of the satellites returns true for usedInFix() isn&amp;#039;t very helpful also. The system apparently loses the fix but still continue to report that there are several sats that are used in it.&lt;br /&gt;
So, the only working solution we have, and the one we actually use in our application, is the following. Let&amp;#039;s say we have this simple class that implements the GpsStatus.Listener:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
private class MyGPSListener implements GpsStatus.Listener {&lt;br /&gt;
    public void onGpsStatusChanged(int event) {&lt;br /&gt;
        switch (event) {&lt;br /&gt;
            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:&lt;br /&gt;
                if (mLastLocation != null)&lt;br /&gt;
                    isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) &amp;lt; 3000;&lt;br /&gt;
&lt;br /&gt;
                if (isGPSFix) { // A fix has been acquired.&lt;br /&gt;
                    // Do something.&lt;br /&gt;
                } else { // The fix has been lost.&lt;br /&gt;
                    // Do something.&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                break;&lt;br /&gt;
            case GpsStatus.GPS_EVENT_FIRST_FIX:&lt;br /&gt;
                // Do something.&lt;br /&gt;
                isGPSFix = true;&lt;br /&gt;
&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
OK, now in onLocationChanged() you should add the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public void onLocationChanged(Location location) {&lt;br /&gt;
    if (location == null) return;&lt;br /&gt;
&lt;br /&gt;
    mLastLocationMillis = SystemClock.elapsedRealtime();&lt;br /&gt;
&lt;br /&gt;
    // Do something.&lt;br /&gt;
&lt;br /&gt;
    mLastLocation = location;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And that&amp;#039;s it. Basically, this is the line that does it all:&lt;br /&gt;
&lt;br /&gt;
 isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) &amp;lt; 3000;&lt;br /&gt;
&lt;br /&gt;
You can tweak the milliseconds value of course, but I would suggest to set it around 3-5 seconds.&lt;br /&gt;
&lt;br /&gt;
This actually works and though I haven&amp;#039;t seen the source code that implements the standard GPS icon, this comes close to replicating its behavior. It could even outdo it lol. Hope this helps someone.&lt;/div&gt;</summary>
		<author><name>87.180.99.32</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Android_Location_API&amp;diff=20014</id>
		<title>Android Location API</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Android_Location_API&amp;diff=20014"/>
		<updated>2013-10-08T13:24:47Z</updated>

		<summary type="html">&lt;p&gt;87.180.99.32: /* Links und Quellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links und Quellen ==&lt;br /&gt;
http://www.vogella.com/articles/AndroidLocationAPI/article.html&lt;br /&gt;
&lt;br /&gt;
http://developer.android.com/reference/android/location/package-summary.html&lt;br /&gt;
&lt;br /&gt;
=== Google Maps API Key ===&lt;br /&gt;
* Notwendig für Zugriffe auf den Google Maps Kartenserver. &lt;br /&gt;
* Alle Android Apps müssen mit einem digitalen Zertifikat signiert werden für das der Entwickler den private key hat. Damit werden die Apps auf dem Map-Server oder im PlayStore getrackt.&lt;br /&gt;
* Man benötigt einen Schlüssel für jedes Zertifikat&lt;br /&gt;
* In der Praxis erstellt man ein Zertifikat für jede App (theoretisch kann man auch mehrere mit einem Zertifikat signieren)&lt;br /&gt;
* Für die Entwicklung nutzt Eclipse ein Entwickler Zertifikat ohne API Key dies reicht nicht bei Apps die einen Maps API Key benötigen&lt;br /&gt;
=== Google Maps API Key erstellen ===&lt;br /&gt;
==== Google Play Services Installieren ====&lt;br /&gt;
Dieses SDK benötigt man um einen Key zu holen (Dieser Schritt muß nur einmal gemacht werden)&lt;br /&gt;
* Android SDK aus Eclipse oder über Terminal starten.(On Mac or Linux,  tools/ directory Befehl: android sdk)&lt;br /&gt;
* Im Android SDK Extras &amp;gt; Google Play services SDK installieren&lt;br /&gt;
==== App Zertifikat Fingerprint anzeigen ====&lt;br /&gt;
Es gibt Debug Zertifikate und Release Zertifikate. Das Debug Zertifikat wird von Eclipse automatisch beim Debuggen der App erstellt. Um den passenden Key zu bekommen braucht man den Fingerprint des gewünschten  Zertifikats.&lt;br /&gt;
===== Debug Zertifikat Fingerprint =====&lt;br /&gt;
Die Zertifikate kann man aus dem debug keystore file auslesen. Es nennt sich debug.keystore und wird beim ersten erstellen des Projekts erzeugt. Es befindet sich im gleichen Verzeichnis wie die Android Virtual Device (AVD) Dateien. Unter Mac ist das:&lt;br /&gt;
 ~/.android/&lt;br /&gt;
Windows Vista and Windows 7: &lt;br /&gt;
 C:\Users\your_user_name\.android\&lt;br /&gt;
In Eclipse kann man den Ort mit &lt;br /&gt;
 Windows &amp;gt; Prefs &amp;gt; Android &amp;gt; Build &lt;br /&gt;
Anzeigen lassen (dann kopieren und in den Finder kopieren.&lt;br /&gt;
&lt;br /&gt;
List the SHA-1 fingerprint im Terminal:&lt;br /&gt;
&lt;br /&gt;
 keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android&lt;br /&gt;
Ausgabe sieht etwa so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Alias name: androiddebugkey&lt;br /&gt;
 Creation date: Jan 01, 2013&lt;br /&gt;
 Entry type: PrivateKeyEntry&lt;br /&gt;
 Certificate chain length: 1&lt;br /&gt;
 Certificate[1]:&lt;br /&gt;
 Owner: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Issuer: CN=Android Debug, O=Android, C=US&lt;br /&gt;
 Serial number: 4aa9b300&lt;br /&gt;
 Valid from: Mon Jan 01 08:04:04 UTC 2013 until: Mon Jan 01 18:04:04 PST 2033&lt;br /&gt;
 Certificate fingerprints:&lt;br /&gt;
      MD5:  AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6A:AC:F9&lt;br /&gt;
      SHA1: BB:0D:AC:74:D3:21:E1:43:07:71:9B:62:90:AF:A1:66:6E:44:5D:75&lt;br /&gt;
      Signature algorithm name: SHA1withRSA&lt;br /&gt;
      Version: 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Zeile mit SHA1 enthält den fingerprint, eine Sequenz von 20 two-digit hexadecimal numbers separated by colons.&lt;br /&gt;
&lt;br /&gt;
*Retrieve information about your application&amp;#039;s certificate.&lt;br /&gt;
*Register a project in the Google APIs Console and add the Maps API as a service for the project.&lt;br /&gt;
*Once you have a project set up, you can request one or more keys.&lt;br /&gt;
*Finally, you can add your key to your application and begin development.&lt;br /&gt;
&lt;br /&gt;
== Position bestimmen ==&lt;br /&gt;
Android kann die Position mit dem GPS Empfänger, über umgebende WLAN Netzwerke (die dann Online mit einer Google Datenbank abgeglichen werden) oder über die aktuelle Handyzelle bestimmen.&lt;br /&gt;
&lt;br /&gt;
Für die Positionsbestimmung stellt Android das Package:&lt;br /&gt;
 android.location&lt;br /&gt;
zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
=== Wichtige Komponenten ===&lt;br /&gt;
==== Location Manager ====&lt;br /&gt;
&amp;#039;&amp;#039;Class LocationManager&amp;#039;&amp;#039; für Zugriff auf Android location service&lt;br /&gt;
====LocationProvider====&lt;br /&gt;
Superclass für die LocationProvider die die Position liefern. Es gibt 3:&lt;br /&gt;
 network //Mobile oder WiFi&lt;br /&gt;
 gps&lt;br /&gt;
 passive // für externe Geräte&lt;br /&gt;
====LocationListener====&lt;br /&gt;
Über den Location Manager kann man einen LocationListener registrieren um regelmäßige Positionsupdates zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Hinweis in Stackoverflow wird über Probleme mit dem onStatusChanged Listener auf diversen Versionen von Android s.u.&lt;br /&gt;
&lt;br /&gt;
==== Criteria Objekt zur Provider Auswahl ====&lt;br /&gt;
Mit einem Criteria Objekt bleibt man flexibel bei der Auswahl des Providers (GPS, Netzwerk...)&lt;br /&gt;
&lt;br /&gt;
Im Criteria Objekt werden Anforderungen zum Beispiel für die Genauigkeit des Ortes gesetzt und diese anschließend bei der Providerauswahl übergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    Criteria criteria = new Criteria(); // Default Settings können über set Methoden verändert werden&lt;br /&gt;
    provider = locationManager.getBestProvider(criteria, false); // Provider mit Kriterien auswählen false bedeutet auch nicht aktivierte Provider werden berücksichtigt.&lt;br /&gt;
    Location location = locationManager.getLastKnownLocation(provider);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Geocoder ====&lt;br /&gt;
Über die Geocoder Klasse kann man Positionsdaten zu Adressdaten und umgekehrt ermitteln (Google Service)&lt;br /&gt;
==== Notwendige Rechte / Permissions ====&lt;br /&gt;
ACCESS_FINE_LOCATION permission für GPS, ansonsten ACCESS_COARSE_LOCATION permission&lt;br /&gt;
=== Beispiel 1 - locationapi.simple ===&lt;br /&gt;
[[Android Location API - Simple Location]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Location Snippets ===&lt;br /&gt;
==== User zum aktivieren von GPS auffordern ====&lt;br /&gt;
Hinweis: Es ist nicht möglich GPS nur über den Code zu starten. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);&lt;br /&gt;
boolean enabled = service&lt;br /&gt;
  .isProviderEnabled(LocationManager.GPS_PROVIDER);&lt;br /&gt;
&lt;br /&gt;
// Check if enabled and if not send user to the GSP settings&lt;br /&gt;
// Better solution would be to display a dialog (AlarmDialog) and suggesting to &lt;br /&gt;
// go to the settings&lt;br /&gt;
if (!enabled) {&lt;br /&gt;
  Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);&lt;br /&gt;
  startActivity(intent);&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Simulation auf dem Simulator ===&lt;br /&gt;
Auf dem Emulierten Device GoogleMaps aktivieren falls das aktivieren des GPS Simulators nicht klappt (Bugs). Man kann die DDMS Perspective von Eclipse nehmen um Geopositionen zu senden.&lt;br /&gt;
&lt;br /&gt;
 Window &amp;gt; Open Perspective &amp;gt; Other &amp;gt; DDMS&lt;br /&gt;
&lt;br /&gt;
Über das Terinal und Telnet kann man auch Positionen schicken&lt;br /&gt;
 telnet localhost 5554&lt;br /&gt;
 geo fix 13.12 49.23&lt;br /&gt;
&lt;br /&gt;
=== Probleme bei der Positionsabfrage umgehen ===&lt;br /&gt;
Quelle: http://stackoverflow.com/questions/2021176/how-can-i-check-the-current-status-of-the-gps-receiver&lt;br /&gt;
&lt;br /&gt;
onStatusChanged() doesn&amp;#039;t get called on Eclair and Froyo. It does get called on 1.6 though.&lt;br /&gt;
Simply counting all available satellites is, of course, useless.&lt;br /&gt;
Checking if any of the satellites returns true for usedInFix() isn&amp;#039;t very helpful also. The system apparently loses the fix but still continue to report that there are several sats that are used in it.&lt;br /&gt;
So, the only working solution we have, and the one we actually use in our application, is the following. Let&amp;#039;s say we have this simple class that implements the GpsStatus.Listener:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
private class MyGPSListener implements GpsStatus.Listener {&lt;br /&gt;
    public void onGpsStatusChanged(int event) {&lt;br /&gt;
        switch (event) {&lt;br /&gt;
            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:&lt;br /&gt;
                if (mLastLocation != null)&lt;br /&gt;
                    isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) &amp;lt; 3000;&lt;br /&gt;
&lt;br /&gt;
                if (isGPSFix) { // A fix has been acquired.&lt;br /&gt;
                    // Do something.&lt;br /&gt;
                } else { // The fix has been lost.&lt;br /&gt;
                    // Do something.&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                break;&lt;br /&gt;
            case GpsStatus.GPS_EVENT_FIRST_FIX:&lt;br /&gt;
                // Do something.&lt;br /&gt;
                isGPSFix = true;&lt;br /&gt;
&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
OK, now in onLocationChanged() you should add the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public void onLocationChanged(Location location) {&lt;br /&gt;
    if (location == null) return;&lt;br /&gt;
&lt;br /&gt;
    mLastLocationMillis = SystemClock.elapsedRealtime();&lt;br /&gt;
&lt;br /&gt;
    // Do something.&lt;br /&gt;
&lt;br /&gt;
    mLastLocation = location;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And that&amp;#039;s it. Basically, this is the line that does it all:&lt;br /&gt;
&lt;br /&gt;
 isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) &amp;lt; 3000;&lt;br /&gt;
&lt;br /&gt;
You can tweak the milliseconds value of course, but I would suggest to set it around 3-5 seconds.&lt;br /&gt;
&lt;br /&gt;
This actually works and though I haven&amp;#039;t seen the source code that implements the standard GPS icon, this comes close to replicating its behavior. It could even outdo it lol. Hope this helps someone.&lt;/div&gt;</summary>
		<author><name>87.180.99.32</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Android_Location_API_-_Simple_Location&amp;diff=20006</id>
		<title>Android Location API - Simple Location</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Android_Location_API_-_Simple_Location&amp;diff=20006"/>
		<updated>2013-10-08T08:03:16Z</updated>

		<summary type="html">&lt;p&gt;87.180.99.32: /* ShowLocation Activity programmieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
== Projekt ==&lt;br /&gt;
1. Android Projekt erstellen Name: Simple Location&lt;br /&gt;
== Permissions ==&lt;br /&gt;
Zum manifest.xml hinzufügen:&lt;br /&gt;
* INTERNET&lt;br /&gt;
* ACCESS_FINE_LOCATION&lt;br /&gt;
* ACCESS_COARSE_LOCATION&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.INTERNET&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.ACCESS_FINE_LOCATION&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.ACCESS_COARSE_LOCATION&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Layout ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;LinearLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:orientation=&amp;quot;vertical&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;LinearLayout&lt;br /&gt;
        android:id=&amp;quot;@+id/linearLayout1&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_marginTop=&amp;quot;40dip&amp;quot;&lt;br /&gt;
        android:orientation=&amp;quot;horizontal&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;TextView&lt;br /&gt;
            android:id=&amp;quot;@+id/TextView01&amp;quot;&lt;br /&gt;
            android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_marginLeft=&amp;quot;10dip&amp;quot;&lt;br /&gt;
            android:layout_marginRight=&amp;quot;5dip&amp;quot;&lt;br /&gt;
            android:text=&amp;quot;Latitude: &amp;quot;&lt;br /&gt;
            android:textSize=&amp;quot;20dip&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;/TextView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;TextView&lt;br /&gt;
            android:id=&amp;quot;@+id/TextView02&amp;quot;&lt;br /&gt;
            android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:text=&amp;quot;unknown&amp;quot;&lt;br /&gt;
            android:textSize=&amp;quot;20dip&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;/TextView&amp;gt;&lt;br /&gt;
    &amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;LinearLayout&lt;br /&gt;
        android:id=&amp;quot;@+id/linearLayout2&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;TextView&lt;br /&gt;
            android:id=&amp;quot;@+id/TextView03&amp;quot;&lt;br /&gt;
            android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_marginLeft=&amp;quot;10dip&amp;quot;&lt;br /&gt;
            android:layout_marginRight=&amp;quot;5dip&amp;quot;&lt;br /&gt;
            android:text=&amp;quot;Longitute: &amp;quot;&lt;br /&gt;
            android:textSize=&amp;quot;20dip&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;/TextView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;TextView&lt;br /&gt;
            android:id=&amp;quot;@+id/TextView04&amp;quot;&lt;br /&gt;
            android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:text=&amp;quot;unknown&amp;quot;&lt;br /&gt;
            android:textSize=&amp;quot;20dip&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;/TextView&amp;gt;&lt;br /&gt;
    &amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ShowLocation Activity programmieren ==&lt;br /&gt;
1. Einen LocationListener implementieren&lt;br /&gt;
 import android.location.LocationListener;&lt;br /&gt;
 ...&lt;br /&gt;
 public class ShowLocationActivity extends Activity&amp;#039;&amp;#039;&amp;#039; implements LocationListener&amp;#039;&amp;#039;&amp;#039;  {&lt;br /&gt;
 ...&lt;br /&gt;
Eclipse zeigt daß wir für das Interface diverse Funktionen brauchen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	@Override&lt;br /&gt;
	public void onLocationChanged(Location arg0) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void onProviderDisabled(String arg0) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void onProviderEnabled(String arg0) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void onStatusChanged(String arg0, int arg1, Bundle arg2) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann verdrahten wir die Textfelder des Layouts mit dem Code...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class ShowLocationActivity extends Activity implements LocationListener{&lt;br /&gt;
	private TextView latitudeField;&lt;br /&gt;
	private TextView longitudeField;&lt;br /&gt;
	private LocationManager locationManager;&lt;br /&gt;
	private String provider;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
	// activity is created...&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
		super.onCreate(savedInstanceState);&lt;br /&gt;
		setContentView(R.layout.activity_show_location);&lt;br /&gt;
		latitudeField = (TextView) findViewById(R.id.TextView02);&lt;br /&gt;
		longitudeField = (TextView) findViewById(R.id.TextView04);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bei den Textviews haben wir auch schon einen LocationManager definiert und einen String, der den gewählten Provider speichern wird (gps oder network). Auch dieser wird in onCreate instanziiert:&lt;br /&gt;
&lt;br /&gt;
LocationManager Service holen&lt;br /&gt;
 locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);&lt;br /&gt;
Ein Criteria Objekt erstellen daß unsere Bedingungen an den Service enthält. Da wir nichts setzen sind es hier Standardbedingungen.&lt;br /&gt;
 Criteria criteria = new Criteria();&lt;br /&gt;
Wir Fragen den Location Manager welches der beste Provider für unsere Kriterien sind (false -&amp;gt; auch wenn diese abgeschaltet sind).&lt;br /&gt;
 provider = locationManager.getBestProvider(criteria, false);&lt;br /&gt;
Welches war die letzte bekannte Position ? Diese wir in ein Location Objekt gespeichert.&lt;br /&gt;
 Location location = locationManager.getLastKnownLocation(provider);&lt;br /&gt;
Wenn wir was haben schreiben wir es in die Textfelder.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(location != null){&lt;br /&gt;
	System.out.println(&amp;quot;Provider &amp;quot; + provider + &amp;quot;has been selected.&amp;quot;);&lt;br /&gt;
	onLocationChanged(location);&lt;br /&gt;
}else{&lt;br /&gt;
	tvLatitude.setText(&amp;quot;Location is not available&amp;quot;);&lt;br /&gt;
	tvLongitude.setText(&amp;quot;Location is not available&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die Activity startet (oder resumed wird) soll der LocationManager regelmäßig Updates über den gewählten provider liefern. Es sollen aber mindestens 600ms und 10m zwischen den Updates liegen. Damit wir dann auch etwas übernehmen können wird im letzten Parameter ein locationManager übergeben dessen onLocationChanged Methode aufgerufen werden soll. In diesem Fall übergeben wir ihn sich selbst.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	/* Request updates at startup */&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void onResume() {&lt;br /&gt;
	  super.onResume();&lt;br /&gt;
	  locationManager.requestLocationUpdates(provider, 600, 10, this);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die Activity pausiert sollen auch die Updates pausieren&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	/* locationlistener updates stoppen wenn Activity pausiert sonst gibt es Fehler im Log */&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void onPause() {&lt;br /&gt;
		super.onPause();&lt;br /&gt;
		locationManager.removeUpdates(this);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn eine neue Position kommt -&amp;gt; Felder updaten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	@Override&lt;br /&gt;
	public void onLocationChanged(Location location) {&lt;br /&gt;
	    int lat = (int) (location.getLatitude());&lt;br /&gt;
	    int lng = (int) (location.getLongitude());&lt;br /&gt;
	    tvLatitude.setText(String.valueOf(lat));&lt;br /&gt;
	    tvLongitude.setText(String.valueOf(lng));&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>87.180.99.32</name></author>
	</entry>
</feed>