Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中是否有谷歌地图导航的API?_Android_Google Maps - Fatal编程技术网

Android中是否有谷歌地图导航的API?

Android中是否有谷歌地图导航的API?,android,google-maps,Android,Google Maps,我正在开发一个Android应用程序,我正在使用谷歌地图。它工作得很好。但是 当用户单击“获取方向”加载地图后,Google Maps会显示方向线,但是没有办法获得一个接一个的书面方向。如果你只是打开谷歌地图并获取方向,你可以在地图和方向列表之间来回切换 是否有任何API可用于获取Android设备默认谷歌地图中提供的所有功能?这应该会有所帮助 阅读->从谷歌地图获取地理点获取方向和路线的最佳方法您可以使用谷歌地图的Web服务。它将为你提供一切。我已经在我的应用程序中使用了这个 下面是一个示例,

我正在开发一个Android应用程序,我正在使用谷歌地图。它工作得很好。但是

当用户单击“获取方向”加载地图后,Google Maps会显示方向线,但是没有办法获得一个接一个的书面方向。如果你只是打开谷歌地图并获取方向,你可以在地图和方向列表之间来回切换

是否有任何API可用于获取Android设备默认谷歌地图中提供的所有功能?

这应该会有所帮助


阅读->从谷歌地图获取地理点

获取方向和路线的最佳方法您可以使用谷歌地图的Web服务。它将为你提供一切。我已经在我的应用程序中使用了这个

下面是一个示例,其中saddr=源地址,daddr=目标地址(即纬度和经度)。您还可以将字符串作为地址而不是lat/lng传递

final Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://maps.google.com/maps?" + "saddr="+ latitude + "," + longitude + "&daddr=" + latitude + "," + longitude));
    intent.setClassName("com.google.android.apps.maps","com.google.android.maps.MapsActivity");
                        startActivity(intent);

希望这能对你有所帮助。

添加到Scorpion的代码(它工作得很好)中,你可能想要得到你的当前位置

    Location currentLocation = googleMap.getMyLocation();
    double latitudeCurr = currentLocation.getLatitude();
    double longitudeCurr = currentLocation.getLongitude();
saddr
作为起始地址

daddr
作为目标地址

    final Intent intent = new Intent(Intent.ACTION_VIEW,
    Uri.parse("+http://maps.google.com/maps?"  "saddr="
    + latitudeCurr + "," + longitudeCurr + "&daddr="
    + latitude + "," + longitude));
    intent.setClassName("com.google.android.apps.maps",
    "com.google.android.maps.MapsActivity");
    startActivity(intent);
这就是我在应用程序中使用的内容

这里有一个解决方案

以下意图将要求从您当前的GPS位置逐轮导航到澳大利亚悉尼的塔龙加动物园

Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
您可以指定纬度和经度,而不是位置名称

Uri gmmIntentUri = Uri.parse("google.navigation:q=-33.846346,151.239518");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

查看更多信息

截至2018年,谷歌发布了谷歌地图导航SDK。您可以在I/O'18上看到以下谷歌地图平台演示,其中谷歌地图产品经理提到了SDK:

不幸的是,这个SDK目前还不能公开使用。您必须联系销售团队才能购买此SDK的许可证。正如我所见,目前只有优步或Lyft这样的大型乘车共享公司在其应用程序中有此SDK

或者,您可以使用在导航模式下打开谷歌地图应用程序。谷歌地图URL构建一个通用的、跨平台的URL来启动谷歌地图,这样你就可以随心所欲地使用它们

例如

为了获得(当前)导航逐轮的书面指示,唯一的方法是解析到目前为止的通知

为了解决这个问题,我编写了一个开源库,可以在这个过程中为您提供帮助(但它需要通知访问):

您可以通过执行以下操作的服务获取状态:

class NavigationListenerEmitter:NavigationListener(){
覆盖已添加的导航通知(导航通知:导航通知){
Log.d(“notificationListener”,“获得初始通知$navNotification”)
}
覆盖导航通知更新(导航通知:导航通知){
Log.d(“notificationListener”,“获得通知更新$navNotification”)
}
覆盖onNavigationNotificationRemoved(navNotification:NavigationNotification){
Log.d(“notificationListener”,“已删除通知$navNotification”)
}
}

它还提供了一个实用程序类来公开诸如包裹之类的事件,这些事件可以很容易地传递给活动。

那么刚刚打开的谷歌地图应用程序呢?我们无法使用此api在自己的应用程序中创建UI?如果您想在自己的应用程序中创建带有导航的UI,则必须使用Google的Direction api并将其与代码中的地图集成。只有在设备上安装Google Maps应用程序时,此操作才有效。此应用程序可能不存在,例如在较新的华为设备上,或者当用户卸载“地图”应用程序时。所以这个答案并没有涵盖所有的用户案例。
String url = "https://www.google.com/maps/dir/?api=1&destination=Madrid,Spain&origin=Barcelona,Spain&travelmode=driving&dir_action=navigate";           
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);