2015-05-19 10 views
8

Sto provando a creare un'app turistica per Android.Applicazione Android con indicazioni vocali GPS

Ho bisogno che l'utente sia guidato da voce. Ho guardato lo googlemaps Android API ma non c'è nulla riguardo le indicazioni vocali.

Conosci qualche soluzione alternativa? C'è qualche altra API/SDK che potrei usare per implementare questo?

Grazie in anticipo.

+0

È possibile recuperare le indicazioni scritte dall'API googlemaps?Quindi potresti lasciarli leggere da TextToSpeech. Potresti ancora avere il problema di scoprire quando dare la prossima istruzione. – Aster

risposta

3

Questa è un'idea molto interessante. Tuttavia, non so se sei pronto a reinventare la ruota per farlo. Nel caso lo siate, ho anche una soluzione, ma prima vorrei introdurre il modo in cui risolverei questo problema:

Su Android, c'è il sistema di intenti che consente di chiamare app interne per facilitare il lavoro. Quindi, perché non dovresti avviare l'app Indicazioni (Google Maps con uno scopo speciale) poiché l'utente probabilmente ha familiarità con l'interfaccia utente e probabilmente gli piace? Inoltre, con questa soluzione, non devi preoccuparti di tenere aggiornati i tuoi contenuti, basta chiedere al sistema e fornirà la soluzione pronta per l'uso. Ed è molto più facile procedere in questo modo. :)

Per fare questo, si dovrà utilizzare pianura URI base che il sistema riconoscerà:

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); 

Dopo di che, l'utente sarà in grado di scegliere come si vuole andare lì e il vostro lavoro è fatto , l'utente è soddisfatto e ti è piaciuto il 99% delle altre app (ha anche i messaggi vocali).

Quindi, se è nelle tue necessità di averlo all'interno della tua app, potrebbe essere possibile (in base alla proposta di Aster) ma dovrai tenere traccia dell'utente stesso (per poter inviare il buono istruzione al momento giusto). Ma prima diamo uno sguardo al Indicazioni API di Google, se si imposta correttamente la vostra applicazione si dovrebbe ricevere questo tipo di JSON (intero 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 
     } 
    } 
    } ] 
} 

Quindi, quello che potrebbe essere possibile è di prendere queste html_instructions e leggerli all'utente con lo Android TTS Lib quando si trova in un quadrato attorno allo start_location o allo end_location. Tuttavia, può essere molto complicato gestire correttamente questo quadrato, ecco perché utilizzerei la prima opzione che rispetta davvero lo spirito di Android.

BTW, qui la definizione di questi attributi:

START_LOCATION contiene le coordinate di latitudine/longitudine della origine di questa gamba. Poiché l'API delle indicazioni stradali calcola le direzioni tra le posizioni utilizzando l'opzione di trasporto più vicina (di solito una strada) nei punti di partenza e di arrivo, posizione_di_inizio potrebbe essere diversa dall'origine fornita di questa tappa se, ad esempio, una strada non è vicina all'origine.

end_location contiene le coordinate di latitudine/longitudine della destinazione specificata di questa tappa. Poiché l'API delle direzioni calcola le direzioni tra le posizioni utilizzando l'opzione di trasporto più vicina (di solito una strada) nei punti di inizio e di fine, end_location può essere diversa dalla destinazione prevista di questa tappa se, ad esempio, una strada non è vicina alla destinazione.

Problemi correlati