Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Intent für Navigation, wie am sinnvollsten lösen?

Das Thema "Intent für Navigation, wie am sinnvollsten lösen?" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 18.11.2011, 13:08   #1 (permalink)
Android Experte
 
Benutzerbild von kleinerkathe

Registriert seit: 23.01.2010
Beiträge: 882
Abgegebene Danke: 74
Erhielt 149 Danke für 120 Beiträge
Standard Intent für Navigation, wie am sinnvollsten lösen?

Hey,

ich möchte einen Intent abschicken um eine Navigation zu starten
So weit so gut, zwei Möglichkeiten hab ich schon mal:

Möglichkeit 1 (geo):
Code:
String uri1 = "geo:"+ longitude + "," + latitude + "?q=location+adress";
Intent i1 = new Intent(Intent.ACTION_VIEW, Uri.parse(uri1));
startActivity(i1);
Möglichkeit2 (google.navigation):
Code:
String uri2 = "google.navigation:q=location+adress";
Intent i2 = new Intent(Intent.ACTION_VIEW,Uri.parse(uri2));
startActivity(i2);
Jetzt startet mir Möglichkeit 1 entweder die einzige GEO-Anwendung auf dem Handy, die mit dem Intent was anfangen kann oder stellt mir eine Auswahlliste zur Verfügung, falls mehrere passende Anwendungen vorhanden sind

Möglichkeit 2 startet direkt Google Maps im Navigationsmodus

Wenn ich Maps nicht installiert hab, gibts bei Möglichkeit 2, so natürlich nen ForceClose, aber das kann man ja verhindern, indem man überprüft ob eine bestimmte Anwendung installiert ist oder ob es eine gibt, die etwas mit dem Intent anfangen kann. (Menüpunkt ausblenden oder per Toast auf GoogleMaps hinweisen)

Bestimmte Anwendung überprüfen: über PackageManager?
Intent überprüfen: Wie?

Bisschen schwierig da die passenden Seiten zu finden, auf denen das erklärt wird, bei "Überprüfen ob Anwendung installiert Android" find ich nicht die Seiten für Entwickler :P Intent wird meistens der umgekehrte Weg beschrieben, d.h. wie man für die eigene Anwendung Intents verarbeitet ...


Gibt es eine erheblich bessere Methode um eine Navigation zu ermöglichen oder nicht? (laut Internet, gibt es keinen "festen" Intent bei Android für Navigation ... leider)


//EDIT: Für Google Maps hätte ich schon mal nen kleines Snippet gefunden:
http://stackoverflow.com/questions/3...oogle-maps-api
Aber kurz nachgehakt, soetwas per try-catch zu "überprüfen" ist nicht wirklich sauber gelöst oder?

Geändert von kleinerkathe (18.11.2011 um 13:22 Uhr)
kleinerkathe ist offline   Mit Zitat antworten
Alt 18.11.2011, 13:53   #2 (permalink)
Fortgeschrittenes Mitglied

Registriert seit: 14.08.2009
Beiträge: 354
Abgegebene Danke: 23
Erhielt 49 Danke für 43 Beiträge
Standard AW: Intent für Navigation, wie am sinnvollsten lösen?

Android check for dependent application during installation? - Stack Overflow

so schwer war nun google verwenden auch nicht =/ solltest nach englischen begriffen statt deutschen suchen
__________________
http://android.fungamer.net/
MichaelS ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei MichaelS für diesen Beitrag:
kleinerkathe (21.11.2011)
Alt 20.11.2011, 21:08   #3 (permalink)
Android-Hilfe.de Mitglied

Modell: Acer Iconia A100

Registriert seit: 28.10.2011
Beiträge: 127
Abgegebene Danke: 15
Erhielt 13 Danke für 11 Beiträge
Standard AW: Intent für Navigation, wie am sinnvollsten lösen?

Zitat:
Zitat von kleinerkathe Beitrag anzeigen
Hey,

ich möchte einen Intent abschicken um eine Navigation zu starten
So weit so gut, zwei Möglichkeiten hab ich schon mal:

Möglichkeit 1 (geo):
Code:
String uri1 = "geo:"+ longitude + "," + latitude + "?q=location+adress";
Intent i1 = new Intent(Intent.ACTION_VIEW, Uri.parse(uri1));
startActivity(i1);
Möglichkeit2 (google.navigation):
Code:
String uri2 = "google.navigation:q=location+adress";
Intent i2 = new Intent(Intent.ACTION_VIEW,Uri.parse(uri2));
startActivity(i2);
Jetzt startet mir Möglichkeit 1 entweder die einzige GEO-Anwendung auf dem Handy, die mit dem Intent was anfangen kann oder stellt mir eine Auswahlliste zur Verfügung, falls mehrere passende Anwendungen vorhanden sind

Möglichkeit 2 startet direkt Google Maps im Navigationsmodus

Wenn ich Maps nicht installiert hab, gibts bei Möglichkeit 2, so natürlich nen ForceClose, aber das kann man ja verhindern, indem man überprüft ob eine bestimmte Anwendung installiert ist oder ob es eine gibt, die etwas mit dem Intent anfangen kann. (Menüpunkt ausblenden oder per Toast auf GoogleMaps hinweisen)

Bestimmte Anwendung überprüfen: über PackageManager?
Intent überprüfen: Wie?

Bisschen schwierig da die passenden Seiten zu finden, auf denen das erklärt wird, bei "Überprüfen ob Anwendung installiert Android" find ich nicht die Seiten für Entwickler :P Intent wird meistens der umgekehrte Weg beschrieben, d.h. wie man für die eigene Anwendung Intents verarbeitet ...


Gibt es eine erheblich bessere Methode um eine Navigation zu ermöglichen oder nicht? (laut Internet, gibt es keinen "festen" Intent bei Android für Navigation ... leider)


//EDIT: Für Google Maps hätte ich schon mal nen kleines Snippet gefunden:
How to detect an android device whether it supports google maps API - Stack Overflow
Aber kurz nachgehakt, soetwas per try-catch zu "überprüfen" ist nicht wirklich sauber gelöst oder?

Das try-catch konstrukt in Java ist exakt für solche Zwecke: Datei vorhanden, Drucker vorhanden, etc. kurz und gut, alles was nicht der direkten Kontrolle des Entwicklers unterliegt....

Der erste Intent ist implizit, der zweite explizit...
Im übrigen ist die Frage, warum Du einen Benutzer zwingen willst Google Maps zu installieren. Möglicherweise hat der Benutzer driftige Gründe, ein andere installierte Anwendung zu verwenden als Google Maps...
Schließlich willst Du ja in erster Linie, daß deine Anwendung installiert wird. Ich würde deshalb einen impliziten Intent für benutzerfreundlich halten. Sparst Dir dann auch ein paar Zeilen Code
mradlmaier ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei mradlmaier für diesen Beitrag:
kleinerkathe (21.11.2011)
Alt 21.11.2011, 11:58   #4 (permalink)
Android Experte
 
Benutzerbild von kleinerkathe

Registriert seit: 23.01.2010
Beiträge: 882
Abgegebene Danke: 74
Erhielt 149 Danke für 120 Beiträge
Standard AW: Intent für Navigation, wie am sinnvollsten lösen?

Zunächst einmal danke euch beiden

Ok, wenn das try-catch Konstrukt genau dazu da ist, dann super Mir persönlich kommts halt eher so vor, als ob try-catch dazu da ist "Ausnahmefälle" abzufangen, die eben normalerweise eher nicht vorkommen sollten ... Habs jetzt mal mit try-catch gelöst

Es gibt, zumindest hab ich dazu nichts gefunden, keinen impliziten Intent für Navigation
Man findet auch keinerlei Angaben ob und wenn ja, wie bspw. CoPilot, Navigon, iGo, etc. auf Intents reagieren können :/

Wieso ich jetzt Google Maps vorschreibe? Würde ich die Anwendung in den Market stellen, dann würde ich es über den impliziten Intent lösen und dem User die Wahl lassen Da die App aber 1. nur zu Demozwecken ist und 2. nur auf meinem Gerät vorgeführt wird, kann ich direkt Google Maps im Navigationsmodus vorführen. Kommt bei Angestellten, die eben ihr iPhone gewöhnt sind besser, wenn direkt die Navigation über 1-Klick gestartet werden kann, als sich durch zig Menüs klicken zu müssen und auch der Punkt "Navigation funktioniert auf Android auch kostenlos" kann man dabei schön erwähnen :P

btw. die App wäre ne Firmenapp und die können ihre Geräte ja vorkonfiguriert ausliefern und eben Google Maps überall festsetzen


@MichaelS: Nette Anwendung Hatte die ne zeitlang auf dem Handy und hat mehrere Abende herhalten müssen
kleinerkathe ist offline   Mit Zitat antworten
Alt 21.11.2011, 15:42   #5 (permalink)
Android-Hilfe.de Mitglied

Modell: Acer Iconia A100

Registriert seit: 28.10.2011
Beiträge: 127
Abgegebene Danke: 15
Erhielt 13 Danke für 11 Beiträge
Standard AW: Intent für Navigation, wie am sinnvollsten lösen?

Zitat:
Zitat von kleinerkathe Beitrag anzeigen
Zunächst einmal danke euch beiden

Ok, wenn das try-catch Konstrukt genau dazu da ist, dann super Mir persönlich kommts halt eher so vor, als ob try-catch dazu da ist "Ausnahmefälle" abzufangen, die eben normalerweise eher nicht vorkommen sollten ... Habs jetzt mal mit try-catch gelöst

Es gibt, zumindest hab ich dazu nichts gefunden, keinen impliziten Intent für Navigation
Man findet auch keinerlei Angaben ob und wenn ja, wie bspw. CoPilot, Navigon, iGo, etc. auf Intents reagieren können :/

Wieso ich jetzt Google Maps vorschreibe? Würde ich die Anwendung in den Market stellen, dann würde ich es über den impliziten Intent lösen und dem User die Wahl lassen Da die App aber 1. nur zu Demozwecken ist und 2. nur auf meinem Gerät vorgeführt wird, kann ich direkt Google Maps im Navigationsmodus vorführen. Kommt bei Angestellten, die eben ihr iPhone gewöhnt sind besser, wenn direkt die Navigation über 1-Klick gestartet werden kann, als sich durch zig Menüs klicken zu müssen und auch der Punkt "Navigation funktioniert auf Android auch kostenlos" kann man dabei schön erwähnen :P

btw. die App wäre ne Firmenapp und die können ihre Geräte ja vorkonfiguriert ausliefern und eben Google Maps überall festsetzen


@MichaelS: Nette Anwendung Hatte die ne zeitlang auf dem Handy und hat mehrere Abende herhalten müssen
"Ausnahmefälle" im Sinne davon, dass Du als Entwickler keine Kontrolle darüber hast. z.B. eine Datei, die sich nicht wie erwartet in einem bestimmten Ordner befindet. Anstelle dass das Program dann unkontrolliert abstürzt, kannst Du im "catch" den Benutzer die Möglichkeit bieten, diese Datei neu zu erstellen oder einen anderen Ordner anzugeben.
Das verhindert zwar keine Ausnahmesituationen, aber das Programm kann dann solche Situationen eleganter behandeln.

Bezüglich impliziter Intents:
Grau ist die Theorie, bunt die Praxis.
Z.b. habe ich neulich einen Test durchgeführt, welche Browser komplexe Webseiten wie gut darstellen. Unter Android gibts >10 verschiedene Browser. Ergebnis war dass effektiv nur 3 Browser in der Lage waren, komplexe Webseiten korrekt darzustellen (nach Änderung der Browsereinstellungen).
Unter Android 3.2 waren es der Google Stock Browser, Dolphin und Opera Mobil (Opera mit tolerablen Einschränkungen)
Unter Android 2.3.3 waren es nur der Ninesky Browser.
Komplex meint: Javascript, Flash, multiple Windows...etc.
Es gibt also durchaus Situationen wo ein expliziter Intent Sinn macht. Leider kann man explizit nur eine einzige Anwendungen aufrufen , und nicht mehrere.
Das zweite Problem spricht Du selbst an. Anwendungen, die generell den gleichen Effekt erfüllen, können im Detail natürlich sehr unterschiedlich sein.

Ich würde mal sagen, solanges es geht, implizite Intents, und falls es nicht anders geht, explizite Intents
mradlmaier ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei mradlmaier für diesen Beitrag:
kleinerkathe (21.11.2011)
Alt 21.11.2011, 16:21   #6 (permalink)
Android-Hilfe.de Mitglied

Modell: Acer Iconia A100

Registriert seit: 28.10.2011
Beiträge: 127
Abgegebene Danke: 15
Erhielt 13 Danke für 11 Beiträge
Standard AW: Intent für Navigation, wie am sinnvollsten lösen?

Bezüglich Ausnahmen/Exceptions:
Es gibt da ein weitere Unterscheidung:
checked Exceptions und unchecked Exceptions
Java Practices -> Checked versus unchecked exceptions

Kurz:
unchecked Exceptions sind auf Fehler in der Programmlogik zurückzuführen, auf die das Programm nicht in sinnvoller weise reagieren kann.

checked Exceptions sind die, über die wir gesprochen haben: Fehlende Dateien, Datenbankfehler, fehlende Anwendungen, nicht angesschlossene Drucker, Netzwerk nicht erreichbar, etc.
Eine Methode ist verpflichtet, checked Exceptions zu behandeln oder auf dem Stack noch oben weiterzugeben (will heissen an den Aufrufer weiterzugeben, der Aufrufer kann die Exception dann entweder behandeln oder an dessen Aufrufer weitergeben, den ganzen Stack hinauf etc.)
Woran erkenne ich eine checked Exception?
Die Methode oder Konstruktor verwendet das Keyword "throws":
public meineMethode(String s) throws{
// mach irgendwas
}
Wenn Du ein solche Methode aufrufst,muss das innerhalb von try-catch passieren.

Noch was: Es gibt noch ein Keyword "throw new .....Exception()
Damit kannst Du ein Exception auslösen z.b. :


public void meineMethode(Object o){
if (o == null) {
throw new NullPointerException()
}
}
mradlmaier ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei mradlmaier für diesen Beitrag:
kleinerkathe (23.11.2011)
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
Sammelthread: Meine 5 sinnvollsten Apps - keine Fragen / Diskussionen nica Sonstige Apps & Widgets 131 11.05.2012 12:39
Meine 5 sinnvollsten Apps [Diskussionsthread] cluster20 Sonstige Apps & Widgets 25 27.04.2012 09:37
Speicherproblem lösen Arkelanfall Root / Hacking / Modding für HTC Desire 8 15.08.2011 13:25
Mehrere OnClick bei Widget für das selbe Intent Inuyashaxp Android App Entwicklung 1 31.07.2011 22:08
Wie Verknüpfung mit Dateiendung lösen? Shakyamuni Acer Iconia A500 / A501 Forum 2 24.07.2011 00:18




Du liest gerade: "Intent für Navigation, wie am sinnvollsten lösen?" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.