带有GPS语音指示的Android应用

zep*_*dro 8 gps android voice google-maps-android-api-2

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

我需要用户以语音为导向.我一直在看,googlemaps Android API但声音方向没什么.

你知道任何解决方法吗?我可以使用其他API/SDK来实现这个吗?

提前致谢.

Lau*_*yer 3

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

\n

在 Android 上,有一个意图系统,它允许您调用内部应用程序,以使您的工作更轻松。既然用户可能熟悉 UI 并且可能喜欢它,那么为什么不启动“路线”应用程序(具有特殊意图的 Google 地图)呢?此外,使用此解决方案,您无需关心保持内容更新,您只需询问系统,它就会提供开箱即用的解决方案。而且以这种方式进行要容易得多。:)

\n

为此,您将使用系统可以识别的简单基本 URI:

\n
String address = "My Fake Address";\nIntent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?daddr=" + address));\nstartActivity(intent);\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

然后,如果您要求将其放入您的应用程序中,则可能是可能的(基于 Aster 命题),但您需要自己跟踪用户(以便能够在合适的时间)。但首先让我们看一下 Google 的 Directions API,如果你正确设置你的应用程序,你应该会收到这种 JSON(整个文档在那里)有完整的文档):

\n
{\n  "status": "OK",\n  "routes": [ {\n    "summary": "I-40 W",\n    "legs": [ {\n      "steps": [ {\n        "travel_mode": "DRIVING",\n        "start_location": {\n          "lat": 41.8507300,\n          "lng": -87.6512600\n        },\n        "end_location": {\n          "lat": 41.8525800,\n          "lng": -87.6514100\n        },\n        "polyline": {\n          "points": "a~l~Fjk~uOwHJy@P"\n        },\n        "duration": {\n          "value": 19,\n          "text": "1 min"\n        },\n        "html_instructions": "Head \\u003cb\\u003enorth\\u003c/b\\u003e on \\u003cb\\u003eS Morgan St\\u003c/b\\u003e toward \\u003cb\\u003eW Cermak Rd\\u003c/b\\u003e",\n        "distance": {\n          "value": 207,\n          "text": "0.1 mi"\n        }\n      },\n      ...\n      ... additional steps of this leg\n    ...\n    ... additional legs of this route\n      "duration": {\n        "value": 74384,\n        "text": "20 hours 40 mins"\n      },\n      "distance": {\n        "value": 2137146,\n        "text": "1,328 mi"\n      },\n      "start_location": {\n        "lat": 35.4675602,\n        "lng": -97.5164276\n      },\n      "end_location": {\n        "lat": 34.0522342,\n        "lng": -118.2436849\n      },\n      "start_address": "Oklahoma City, OK, USA",\n      "end_address": "Los Angeles, CA, USA"\n    } ],\n    "copyrights": "Map data \xc2\xa92010 Google, Sanborn",\n    "overview_polyline": {\n      "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"\n    },\n    "warnings": [ ],\n    "waypoint_order": [ 0, 1 ],\n    "bounds": {\n      "southwest": {\n        "lat": 34.0523600,\n        "lng": -118.2435600\n      },\n      "northeast": {\n        "lat": 41.8781100,\n        "lng": -87.6297900\n      }\n    }\n  } ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

因此,当用户位于或周围的正方形中时,可以使用Android TTS Libhtml_instructions将这些内容读取给用户。start_locationend_location。然而,正确管理这个方块可能非常复杂,这就是为什么我会使用第一个选项,它真正尊重 Android 精神。

\n

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

\n
\n

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

\n

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

\n
\n