一切就绪!

着手开发前,请先阅读我们的开发者文档

激活 Google Maps Android API

为帮助您起步,我们将引导您在 Google Developers Console 中先完成几项任务:

  1. 创建或选择项目
  2. 激活 Google Maps Android API
  3. 创建相应密钥
继续

位置数据

移动应用的其中一个独特功能是位置感知。 移动用户无论走到哪里都随身携带自己的设备,因此为您的应用添加位置感知可给用户带来更具环境感的体验。

代码示例

GitHub上的 ApiDemos 存储区包含相关示例,展示如何使用地图上的位置:

请参阅有关显示地图上的当前地点详情的教程。

使用位置数据

提供给 Android 设备的位置数据包括设备的当前位置(结合使用多种技术确定)、移动的方向和方式,以及设备移动范围是否覆盖预定义的地理边界(或称地理围栏)。

视您的应用的具体需求,您可以从若干位置数据使用方式中进行选择:

  • My Location 层提供了一种在地图上显示设备位置的简单方式。 它并不提供数据。
  • 建议通过 Google Play services Location API 发出所有位置数据编程请求。

  • LocationSource 接口允许您提供自定义位置提供商。

位置权限

如果您的应用需要访问用户的位置,您必须通过向您的应用添加相关 Android 位置权限来请求权限。

Android 提供两种位置权限:ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION。 您选择的权限决定了 API 所返回位置的精确度。 您只需根据自己需要的精确度请求其中一种 Android 位置权限:

API 返回的位置精确度大约相当于城市街区。

向应用清单文件添加权限

在您的 Android 清单文件中,添加下列权限之一作为 <manifest> 元素的子元素。 粗略位置权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp" >
  ...
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  ...
</manifest>

或精确位置权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp" >
  ...
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  ...
</manifest>

请求运行时权限

Android 6.0 (Marshmallow) 引入了新的权限处理模型,旨在简化用户安装和升级应用的过程。 如果您的应用以 API 级别 23 或更高级别为目标,便可使用这种新的权限模型。

如果您的应用支持这种新权限模型,并且设备运行的是 Android 6.0 (Marshmallow) 或更高版本,则用户无需在安装或升级应用时授予任何权限。

应用必须在运行时通过检查确认其是否具备必要的权限,否则将请求相应权限。

系统会向用户显示一个对话框,请求授予权限。

为获得最佳用户体验,必须在上下文中请求权限。 如果位置是您的应用正常工作所必需,则您应该在应用启动时请求位置权限。 一种较好的做法是显示一个热情的欢迎屏幕或向导,让用户了解必须授予权限的原因。

如果应用需要的权限仅用于执行其部分功能,则您应该在应用执行需要该权限的操作时请求位置权限。

应用必须以适当方式处理用户不授予权限的情况。 例如,如果特定功能需要该权限,则应用可以禁用该功能。 如果该权限对于应用正常运行至关重要,则应用可以禁用其所有功能,并通知用户需要授予该权限。

以下代码示例利用支持库检查权限,然后启用 My Location 层:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
    mMap.setMyLocationEnabled(true);
} else {
    // Show rationale and request permission.
}

以下代码示例通过实现支持库中的 ActivityCompat.OnRequestPermissionsResultCallback 来处理权限请求的结果:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == MY_LOCATION_REQUEST_CODE) {
      if (permissions.length == 1 &&
          permissions[0] == Manifest.permission.ACCESS_FINE_LOCATION &&
          grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        mMap.setMyLocationEnabled(true);
    } else {
      // Permission was denied. Display an error message.
    }
}

如需查看更多代码示例以及 Android 运行时权限最佳做法,请参阅 Android 权限模型的文档。

My Location 层

您可以利用 My Location 层和 My Location 按钮为您的用户提供其在地图上的当前位置。

注:在启用 My Location 层之前,您必须确保自己具备所需的运行时位置权限

请按以下所述在地图上启用 My Location 层:

mMap.setMyLocationEnabled(true);

启用了 My Location 层时,My Location 按钮会出现在地图的右上角。 当用户点击该按钮时,摄像头将设备的当前位置(若已知)显示为地图的中心。 设备处于静止状态时,地图以小蓝点指示该位置;处于运动状态时则以 V 形指示该位置。

My Location 按钮

点击还会触发 GoogleMap.OnMyLocationButtonClickListener

您可以通过调用 UiSettings.setMyLocationButtonEnabled(false) 完全禁止该按钮出现。

请注意,My Location 层不会返回任何数据。 如果您想以编程方式访问位置数据,请使用 Location API

Google Play services Location API

Google Play services Location API 是向您的 Android 应用添加位置感知的首选方法。 它提供的功能允许您:

  • 确定设备位置
  • 侦听位置变化
  • 在设备处于运动状态时确定交通模式
  • 创建和监控预定义地理区域(称为地理围栏)

Location API 让您可以更方便地开发节能型位置感知应用。 与 Google Maps Android API 类似,Location API 也是作为 Google Play 服务 SDK 的一部分进行分发。 如需了解有关 Location API 的详细信息,请参阅 Android 培训课程让您的应用具备位置感知能力Location API 参考

Google Play services SDK 自带了代码示例。

发送以下问题的反馈:

此网页
Google Maps Android API
Google Maps Android API
需要帮助?请访问我们的支持页面