我正在尝试为Android创建一个旅游应用程序。
我需要用户通过语音进行引导。我一直在查看googlemaps Android API
,但没有关于语音方向的内容。
您知道任何解决方法吗?是否有其他API / SDK可供我使用来实现此功能?
提前感谢。
我正在尝试为Android创建一个旅游应用程序。
我需要用户通过语音进行引导。我一直在查看googlemaps Android API
,但没有关于语音方向的内容。
您知道任何解决方法吗?是否有其他API / SDK可供我使用来实现此功能?
提前感谢。
这是一个非常酷的想法。不过,我不知道你是否准备好重新发明轮子来实现它。如果你准备好了,我也有一个解决方案,但首先让我介绍一下我会如何解决这个问题:
在Android上,有一个意图系统,允许您调用内部应用程序,以便使您的工作更轻松。那么,为什么不启动方向应用程序(Google Maps具有特殊意图),因为用户可能熟悉UI并且可能喜欢它呢?此外,通过这种解决方案,您无需担心保持更新,只需询问系统即可提供开箱即用的解决方案。这种方式处理起来要容易得多。 :)
要做到这一点,您将使用系统将识别的纯基本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);
接下来,用户将能够选择他想要如何到达目的地,你的工作完成了,用户满意了,并且你像其他99%的应用程序一样提供了语音消息。
然后,如果您的要求是将其放在您的应用程序中,则可能是可能的(基于Aster的建议),但您需要自己跟踪用户(以便能够在正确的时间发送正确的指示)。但首先让我们看一下Google的Directions API,如果您正确设置了应用程序,则应收到此类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
}
}
} ]
}
html_instructions
,并在用户在start_location
或end_location
周围的广场时使用Android TTS Lib向用户朗读。然而,正确管理此广场可能非常复杂,因此我将使用第一种选项,这确实尊重了Android精神。start_location包含此段落起点的纬度/经度坐标。因为Directions API通过在起点和终点处使用最近的交通工具(通常为道路)计算位置之间的方向,所以如果例如道路不靠近起点,则
start_location
可能与该段落提供的起点不同。end_location包含此段落的给定目的地的纬度/经度坐标。因为Directions API通过在起点和终点处使用最近的交通工具(通常为道路)计算位置之间的方向,所以如果例如道路不接近目的地,则
end_location
可能与该段落提供的目的地不同。