【问题标题】:Android app with GPS voice directions带有 GPS 语音指示的 Android 应用
【发布时间】:2015-07-31 01:29:09
【问题描述】:

我正在尝试为 Android 创建一个旅游应用。

我需要语音引导用户。我一直在看googlemaps Android API,但没有关于语音指示的内容。

您知道任何解决方法吗?是否有任何其他 API/SDK 可用于实现此功能?

提前致谢。

【问题讨论】:

  • 您能从 googlemaps API 检索书面指示吗?然后你可以让它们被 TextToSpeech 读取。您仍然无法确定何时给出下一条指令。

标签: android gps google-maps-android-api-2 voice


【解决方案1】:

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

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

为此,您将使用系统可以识别的普通基本 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(整个文档 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
      }
    }
  } ]
}

因此,当用户在start_locationend_location 周围的一个正方形中时,可以采取这些html_instructions 并将它们读给Android TTS Lib 的用户。但是,要妥善管理这个方块可能会非常复杂,这就是为什么我会使用第一个真正尊重 Android 精神的选项。

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

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

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

【讨论】:

    猜你喜欢
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多