Android 版 Google 地图应用公开了多个 intent,您可以使用这些 intent 以显示模式、搜索模式、导航模式或街景模式启动 Google 地图。如需在应用中嵌入地图,请参阅 Maps SDK for Android 快速入门。
对于 Android Automotive OS (AAOS) 平台,有一些特定的注意事项和可用的额外 intent。如需了解详情,请参阅用于 Android Automotive Intent 的 Google 地图文档。
概览
借助 intent,您可以通过在 Intent 对象中描述您想执行的操作(如“显示地图”或“显示前往机场的路线”)来启动另一个应用中的 activity。Android 版 Google 地图应用支持多种不同的 intent,可让您启动 Google 地图应用并执行以下四项操作之一:
- 以指定位置和缩放级别显示地图。
- 搜索位置或地点,并在地图上显示。
- 请求从一个位置到另一个位置的路线。系统可以返回三种交通方式的路线:驾车、步行、骑车。
- 在 Google 街景中显示全景图像。
本页面介绍了可与 Android 版 Google 地图应用搭配使用的 intent。如需详细了解 intent,请参阅 intent 和 intent 过滤器以及常见 intent。
意图请求
如需使用 intent 启动 Google 地图,您必须先创建一个 Intent 对象,并指定其操作、URI 和软件包。
- 操作:所有 Google 地图 intent 都作为 View 操作(
ACTION_VIEW)进行调用。 - URI:Google 地图 intent 使用经过 网址 编码的 URI,用于指定所选操作以及执行该操作所需的一些数据。
软件包:调用
setPackage("com.google.android.apps.maps")可确保 Android 版 Google 地图应用处理该 intent。如果未设置软件包,系统会确定哪些应用可以处理Intent。如果有多个应用可用,系统可能会询问用户要使用哪个应用。
创建 Intent 后,您可以通过多种方式请求系统启动相关应用。一种常见的方法是将 Intent 传递给 startActivity() 方法。系统会启动必要的应用(在本例中为 Google 地图),并启动相应的 Activity。
Java
// Create a Uri from an intent string. Use the result to create an Intent.
Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988");
// Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
// Make the Intent explicit by setting the Google Maps package
mapIntent.setPackage("com.google.android.apps.maps");
// Attempt to start an activity that can handle the Intent
startActivity(mapIntent);
Kotlin
// Create a Uri from an intent string. Use the result to create an Intent.
val gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988")
// Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
// Make the Intent explicit by setting the Google Maps package
mapIntent.setPackage("com.google.android.apps.maps")
// Attempt to start an activity that can handle the Intent
startActivity(mapIntent)
如果系统无法识别可以响应 intent 的应用,您的应用可能会崩溃。因此,在向用户显示这些 intent 之一之前,请先验证是否已安装接收应用。
如需验证是否有应用可接收该 intent,请在 Intent 对象上调用 resolveActivity()。如果结果不为 null,则表示至少有一个应用可以处理该 intent,因此可以放心调用 startActivity()。如果结果为 null,请勿使用该 intent,并尽可能停用调用该 intent 的功能。
Java
if (mapIntent.resolveActivity(getPackageManager()) != null) {
...
}
Kotlin
mapIntent.resolveActivity(packageManager)?.let {
...
}
例如,如需显示旧金山地图,您可以使用以下代码:
Java
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
if (mapIntent.resolveActivity(getPackageManager()) != null) {
startActivity(mapIntent);
}
Kotlin
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
mapIntent.resolveActivity(packageManager)?.let {