带有GPS语音指示的Android应用程序

我正在尝试为Android创build一个旅游应用程序。

我需要用户以语音为导向。 我一直在看googlemaps Android API但没有关于语音方向。

你知道这个解决方法吗? 有没有其他的API / SDK可以用来实现?

提前致谢。

Solutions Collecting From Web of "带有GPS语音指示的Android应用程序"

这是一个非常酷的想法。 但是,我不知道你是否准备重新发明轮子来做到这一点。 如果你是,我也有一个解决scheme,但让我先介绍一下,我会解决这个问题的方式:

在Android上,有一个意图系统,允许您调用内部应用程序,以使您的工作更轻松。 那么为什么不启动路线应用程序(谷歌地图有一个特殊的意图),因为用户可能熟悉的用户界面,可能是喜欢它? 而且,使用这个解决scheme,您不需要关心如何保持更新,只需询问系统,它就可以提供开箱即用的解决scheme。 这样做更容易。 🙂

为此,您将使用系统将识别的普通基本URI:

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

之后,用户将能够select他想要如何去那里,你的工作完成,用户满意,并且你喜欢99%的其他应用程序(他也有声音消息)。

那么,如果你的要求是在你的应用程序中,那么它可能是可能的(基于Aster命题),但是你需要自己跟踪用户(为了能够在右边发送好的指令时间)。 但首先让我们来看一下Google的Directions API,如果你正确设置了你的App,你应该会收到这样的JSON(整个文档):

 { "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 } } } ] } 

所以有可能的是在start_location或者end_location周围的一个方形中,取这些html_instructions并且用Android TTS Lib将它们读给用户。 然而,正确地pipe理这个广场可能是非常复杂的,这就是为什么我会使用真正尊重Android Spirit的第一个选项。

顺便说一句,这里是这些属性的定义:

start_location包含这条腿的原点的纬度/经度坐标。 由于Directions API通过在起点和终点处使用最近的交通选项(通常是道路)来计算位置之间的方向,因此,例如,如果道路不在起点附近,start_location可能与此路段的所提供的起点不同。

end_location包含此分支给定目的地的纬度/经度坐标。 由于Directions API通过在起点和终点处使用最近的交通选项(通常是道路)来计算位置之间的方向,因此,如果例如道路不在目的地附近,则end_location可能不同于该路段的所提供的目的地。