2015-05-19 11 views
8

Ich versuche, eine Tourismus-App für Android zu erstellen.Android App mit GPS-Sprachrichtungen

Ich brauche den Benutzer durch Sprache geführt werden. Ich habe mir die googlemaps Android API angesehen, aber es gibt keine Sprachanweisungen.

Kennen Sie eine Problemumgehung dafür? Gibt es eine andere API/SDK, die ich verwenden könnte, um dies zu implementieren?

Vielen Dank im Voraus.

+0

Können Sie schriftliche Anweisungen von der googlemaps API abrufen?Dann könnten Sie sie von TextToSpeech lesen lassen. Sie sollten immer noch das Problem haben, herauszufinden, wann Sie die nächste Anweisung geben müssen. – Aster

Antwort

3

Das ist eine sehr coole Idee. Ich weiß jedoch nicht, ob Sie bereit sind, das Rad neu zu erfinden. Falls Sie es sind, habe ich auch eine Lösung, aber lassen Sie mich zuerst vorstellen, wie ich dieses Problem lösen würde:

Auf Android gibt es das Intent-System, mit dem Sie interne Anwendungen aufrufen können, um Ihre Arbeit zu erleichtern. Warum sollten Sie die Google Richtungs-App (Google Maps mit besonderer Absicht) nicht starten, da der Nutzer wahrscheinlich mit der Benutzeroberfläche vertraut ist und diese wahrscheinlich mag? Außerdem müssen Sie bei dieser Lösung nicht darauf achten, Ihre Daten auf dem neuesten Stand zu halten. Sie müssen nur das System fragen, damit die Lösung sofort verfügbar ist. Und es ist viel einfacher, so vorzugehen. :)

, das zu tun, werden Sie schlicht grundlegende URI verwenden, dass das System erkennen:

String address = "My Fake Address"; 
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?daddr=" + address)); 
startActivity(intent); 

Danach wird der Benutzer in der Lage sein zu entscheiden, wie er dorthin gehen will und Ihre Arbeit erledigt ist , der Benutzer ist zufrieden und Sie haben 99% der anderen Apps (er hat auch die vokalen Nachrichten).

Dann, wenn es in Ihren Anforderungen ist, um es in Ihrer App zu haben, könnte es möglich sein (basierend auf Aster Vorschlag), aber Sie müssen den Benutzer selbst verfolgen (in der Lage sein, das Gut zu senden Anleitung zur richtigen Zeit). Aber lassen Sie uns zuerst an der Directions API von Google einen Blick darauf werfen, wenn Sie richtig Ihre App einrichten sollten Sie diese Art von JSON erhalten (ganze doc there):

{ 
    "status": "OK", 
    "routes": [ { 
    "summary": "I-40 W", 
    "legs": [ { 
     "steps": [ { 
     "travel_mode": "DRIVING", 
     "start_location": { 
      "lat": 41.8507300, 
      "lng": -87.6512600 
     }, 
     "end_location": { 
      "lat": 41.8525800, 
      "lng": -87.6514100 
     }, 
     "polyline": { 
      "points": "[email protected]" 
     }, 
     "duration": { 
      "value": 19, 
      "text": "1 min" 
     }, 
     "html_instructions": "Head \u003cb\u003enorth\u003c/b\u003e on \u003cb\u003eS Morgan St\u003c/b\u003e toward \u003cb\u003eW Cermak Rd\u003c/b\u003e", 
     "distance": { 
      "value": 207, 
      "text": "0.1 mi" 
     } 
     }, 
     ... 
     ... additional steps of this leg 
    ... 
    ... additional legs of this route 
     "duration": { 
     "value": 74384, 
     "text": "20 hours 40 mins" 
     }, 
     "distance": { 
     "value": 2137146, 
     "text": "1,328 mi" 
     }, 
     "start_location": { 
     "lat": 35.4675602, 
     "lng": -97.5164276 
     }, 
     "end_location": { 
     "lat": 34.0522342, 
     "lng": -118.2436849 
     }, 
     "start_address": "Oklahoma City, OK, USA", 
     "end_address": "Los Angeles, CA, USA" 
    } ], 
    "copyrights": "Map data ©2010 Google, Sanborn", 
    "overview_polyline": { 
     "points": "[email protected][email protected]`vnApw{A`[email protected]~w\\|[email protected]{[email protected]@b}@[email protected][email protected]@jc|Bx}C`[email protected]|@[email protected]}Axf][email protected][email protected]{A~d{A|[email protected]`cFp~xBc`[email protected]@[email protected][email protected]@[email protected]|{CbtY~jGqeMb{iF|n\\~mbDzeVh_Wr|Efc\\x`Ij{kE}mAb~uF{cNd}xBjp][email protected]|[email protected]_Kv~eGyqTj_|@`uV`k|[email protected]}[email protected][email protected]`CnvHx`[email protected]@j|[email protected]|[email protected]`[email protected][email protected]}[email protected]`@|}[email protected]@jakEitAn{fB_a]lexClshBtmqAdmY_hLxiZd~XtaBndgC" 
    }, 
    "warnings": [ ], 
    "waypoint_order": [ 0, 1 ], 
    "bounds": { 
     "southwest": { 
     "lat": 34.0523600, 
     "lng": -118.2435600 
     }, 
     "northeast": { 
     "lat": 41.8781100, 
     "lng": -87.6297900 
     } 
    } 
    } ] 
} 

Also, was möglich sein könnte, ist diese html_instructions zu nehmen und sie dem Benutzer mit der Android TTS Lib zu lesen, wenn er in einem Quadrat um die start_location oder die end_location ist. Es kann jedoch sehr kompliziert sein, dieses Quadrat richtig zu verwalten, deshalb würde ich die erste Option verwenden, die wirklich den Android Spirit respektiert.

BTW, sind hier die Definition dieser Attribute:

start_location die Breiten-/Längenkoordinaten des Ursprungs dieses Bein enthält. Da die Directions-API Routen zwischen Orten berechnet, indem die nächstgelegene Transportoption (normalerweise eine Straße) am Start- und Endpunkt verwendet wird, kann start_location von der angegebenen Herkunft dieses Abschnitts abweichen, wenn z. B. eine Straße nicht in der Nähe des Ursprungs liegt.

end_location enthält die Längen-/Breitenkoordinaten des angegebenen Ziels dieses Beins. Da die Directions-API Routen zwischen Orten berechnet, indem sie die nächstgelegene Transportoption (normalerweise eine Straße) am Start- und Endpunkt verwendet, kann sich die Endposition von dem bereitgestellten Ziel dieses Abschnitts unterscheiden, wenn sich z. B. eine Straße nicht in der Nähe des Ziels befindet.