Android app with GPS voice directions
Asked Answered
A

1

8

I'm trying to create a tourism app for Android.

I need the user be guided by voice. I've been looking at the googlemaps Android API but there's nothing about voice directions.

Do you know any workaround for this? Is there any other API/SDK that I could use to implement this?

Thanks in advance.

Athal answered 19/5, 2015 at 9:37 Comment(1)
Can you retrieve written directions from the googlemaps API? Then you could let them be read by TextToSpeech. You sould still have the problem to find out when to give the next instruction.Malvern
C
3

That's a very cool idea. However, I do not know if you're ready to reinvent the wheel to do that. In case you are, I also have a solution but let me first introduce the way I would solve this problem:

On Android, there is the intent system which allows you to call internal apps in order to make your job easier. So why wouldn't you launch the Directions app (Google Maps with a special intent) since the user likely is familiar with the UI and probably likes it? Also, with this solution, you do not need to take care about keeping your stuff updated, you just ask the system and it'll provide the solution out of the box. And it is much much easier to proceed this way. :)

To do that, you will use plain basic URI that the system will recognise:

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

After that, the user will be able to choose how he wants to go there and your job is done, the user is satisfied, and you did like 99% of the other apps (he has the vocal messages as well).

Then, if it is in your requirements to have it inside your app, it could be possible (based on Aster proposition) but you'll need to keep a track of the user yourself (to be able to send the good instruction at the right time). But first let's take a look at the Directions API of Google, if you correctly set up your App you should receive this kind of JSON (whole 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": "a~l~Fjk~uOwHJy@P"
        },
        "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": "a~l~Fjk~uOnzh@vlbBtc~@tsE`vnApw{A`dw@~w\\|tNtqf@l{Yd_Fblh@rxo@b}@xxSfytAblk@xxaBeJxlcBb~t@zbh@jc|Bx}C`rv@rw|@rlhA~dVzeo@vrSnc}Axf]fjz@xfFbw~@dz{A~d{A|zOxbrBbdUvpo@`cFp~xBc`Hk@nurDznmFfwMbwz@bbl@lq~@loPpxq@bw_@v|{CbtY~jGqeMb{iF|n\\~mbDzeVh_Wr|Efc\\x`Ij{kE}mAb~uF{cNd}xBjp]fulBiwJpgg@|kHntyArpb@bijCk_Kv~eGyqTj_|@`uV`k|DcsNdwxAott@r}q@_gc@nu`CnvHx`k@dse@j|p@zpiAp|gEicy@`omFvaErfo@igQxnlApqGze~AsyRzrjAb__@ftyB}pIlo_BflmA~yQftNboWzoAlzp@mz`@|}_@fda@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
      }
    }
  } ]
}

So what could be possible is to take these html_instructions and to read them to the user with the Android TTS Lib when he is in a square around the start_location or the end_location. However, it can be very complicated to manage this square properly, that's why I would use the first option which is really respecting the Android Spirit.

BTW, here are the definition of these attributes:

start_location contains the latitude/longitude coordinates of the origin of this leg. Because the Directions API calculates directions between locations by using the nearest transportation option (usually a road) at the start and end points, start_location may be different than the provided origin of this leg if, for example, a road is not near the origin.

end_location contains the latitude/longitude coordinates of the given destination of this leg. Because the Directions API calculates directions between locations by using the nearest transportation option (usually a road) at the start and end points, end_location may be different than the provided destination of this leg if, for example, a road is not near the destination.

Coquetry answered 30/5, 2015 at 14:41 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.