创建 Android 应用程序 - Amazon Location Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建 Android 应用程序

按照以下步骤使用 Amazon Location Service 构建 iOS 应用程序。

GitHub 克隆项目文件。

AWS 账户准备就绪后,您可以生成 Amazon Location Service 资源。这些资源对于执行提供的代码段至关重要。

注意

如果尚未创建 AWS 账户,请创建 AWS 账户

首先,您需要创建 Amazon Cognito 身份池 ID,请按以下步骤进行操作:

  1. 在 AWS 控制台中,导航至 Amazon Cognito 服务,从左侧菜单中选择身份池,然后选择创建身份池

  2. 确保选中访客访问权限,然后按下一步继续。

  3. 接下来,创建一个新 IAM 角色或使用现有 IAM 角色。

  4. 输入身份池名称,并确保身份池可以访问您将在接下来的步骤中创建的地图和跟踪器的 Amazon Location (geo) 资源。

现在,您需要在 AWS Amazon Location 控制台中创建地图并设置地图样式,请按以下步骤操作:

  1. 导航至 Amazon Location 控制台的地图部分,然后选择创建地图,预览可用的地图样式。

  2. 为新地图资源提供名称描述。记录您分配给地图资源的名称,因为稍后本教程会使用该名称。

  3. 选择地图样式时,请考虑地图数据提供程序。有关更多详细信息,请参阅 AWS 服务条款的第 82 节。

  4. 接受 Amazon Location 条款和条件,然后选择创建地图。创建地图后,您可以通过放大、缩小或向任意方向平移来与地图进行交互。

使用 Amazon Location 控制台创建跟踪器

  1. 打开 Amazon Location Service 控制台

  2. 在左侧导航窗格中,选择跟踪器

  3. 选择创建跟踪器

  4. 填写所有必填字段。

  5. 位置筛选下,选择最适合您打算如何使用跟踪器资源的选项。如果未设置位置筛选,则默认设置为 TimeBased。有关更多信息,请参阅本指南中的“跟踪器”,以及《Amazon Location Service 跟踪器 API 参考》中的“PositionFiltering”。

  6. 选择创建跟踪器完成操作。

创建地理围栏集合时,您可以使用控制台、API 或 CLI。以下步骤将指导您完成每个选项。

使用 Amazon Location 控制台创建地理围栏集合:

  1. 打开 Amazon Location Service 控制台:https://console.aws.amazon.com/location/。

  2. 在左侧导航窗格中,选择“地理围栏集合”。

  3. 选择创建地理围栏集合。

  4. 为集合提供名称和描述。

  5. 根据以 CloudWatch 为目标的 EventBridge 规则,您可以创建一条可选的 EventBridge 规则,以开始对地理围栏事件做出反应。这使 Amazon Location 能够向 Amazon CloudWatch Logs 发布事件。

  6. 选择创建地理围栏集合。

使用 Amazon Location API 创建地理围栏集合:

使用 Amazon Location 地理围栏 API 中的 CreateGeofenceCollection 操作。以下示例使用 API 请求创建名为 GOECOLLECTION_NAME 的地理围栏集合。

POST /geofencing/v0/collections Content-type: application/json { "CollectionName": "GOECOLLECTION_NAME", "Description": "Geofence collection 1 for shopping center", "Tags": { "Tag1" : "Value1" } }

使用 AWS CLI 命令创建地理围栏集合:

使用 create-geofence-collection 命令。以下示例使用 AWS CLI 创建名为 GOECOLLECTION_NAME 的地理围栏集合。

aws location \ create-geofence-collection \ --collection-name "GOECOLLECTION_NAME" \ --description "Shopping center geofence collection" \ --tags Tag1=Value1  

要将跟踪器链接到地理围栏集合,您可以使用控制台、API 或 CLI。以下步骤将指导您完成每个选项。

使用 Amazon Location Service 控制台将跟踪器资源链接到地理围栏集合:

  1. 打开 Amazon Location 控制台。

  2. 在左侧导航窗格中,选择跟踪器

  3. 设备跟踪器下,选择目标跟踪器的名称链接。

  4. 链接的地理围栏集合下,选择链接地理围栏集合

  5. 链接的地理围栏集合窗口中,从下拉菜单中选择一个地理围栏集合。

  6. 选择链接

  7. 在您关联跟踪器资源后,它将处于活动状态。

使用 Amazon Location API 将跟踪器资源链接到地理围栏集合:

使用 Amazon Location 跟踪器 API 中的 AsssociateTrackerConsumer 操作。以下示例使用一个 API 请求,该请求使用其 Amazon 资源名称 (ARN) 将 ExampleTracker 与地理围栏集合链接起来。

POST /tracking/v0/trackers/ExampleTracker/consumers Content-type: application/json { "ConsumerArn": "arn:aws:geo:us-west-2:123456789012:geofence-collection/GOECOLLECTION_NAME" }

使用 AWS CLI 命令将跟踪器资源链接到地理围栏集合:

使用 associate-tracker-consumer 命令。以下示例使用 AWS CLI 创建名为 GOECOLLECTION_NAME 的地理围栏集合。

aws location \ associate-tracker-consumer \ --consumer-arn "arn:aws:geo:us-west-2:123456789012:geofence-collection/GOECOLLECTION_NAME" \ --tracker-name "ExampleTracker"

创建 Lambda 函数:

要在 AWS IoT Core 和 Amazon Location Service 之间建立连接,您需要一个 AWS Lambda 函数来处理由 EventBridge CloudWatch 事件转发的消息。此函数将提取所有位置数据,将其格式化为 Amazon Location Service,然后通过 Amazon Location 跟踪器 API 提交。您可以通过 AWS Lambda 控制台创建此函数,也可以使用 AWS Command Line Interface (AWS CLI) 或 AWS Lambda API。要使用控制台创建 Lambda 函数,将位置更新发布到 Amazon Location,请执行以下操作:

  1. 通过 https://console.aws.amazon.com/lambda/ 打开 AWS Lambda 控制台。

  2. 从左侧导航窗格中,选择函数。

  3. 选择创建函数,并确保选择从头开始创作。

  4. 填写以下选框:

    • 函数名称

    • 对于运行时选项,选择“Node.js 16.x”。

  5. 选择“创建函数”。

  6. 选择“代码”选项卡以打开编辑器。

  7. 在 index.js 中使用以下内容覆盖占位符代码:

    const AWS = require('aws-sdk') const iot = new AWS.Iot(); exports.handler =  function(event) { console.log("event===>>>", JSON.stringify(event)); var param = { endpointType: "iot:Data-ATS" }; iot.describeEndpoint(param, function(err, data) { if (err) { console.log("error===>>>", err, err.stack); // an error occurred } else {       var endp = data['endpointAddress'];       const iotdata = new AWS.IotData({endpoint: endp});           const trackerEvent = event["detail"]["EventType"];       const src = event["source"];       const time = event["time"];       const gfId = event["detail"]["GeofenceId"];       const resources = event["resources"][0];         const splitResources = resources.split(".");         const geofenceCollection = splitResources[splitResources.length - 1];       const coordinates = event["detail"]["Position"];                                     const deviceId = event["detail"]["DeviceId"];       console.log("deviceId===>>>", deviceId);       const msg =  {           "trackerEventType" : trackerEvent,           "source" : src,           "eventTime" : time,           "geofenceId" : gfId,           "coordinates": coordinates,           "geofenceCollection": geofenceCollection       }; const params = { topic: `${deviceId}/tracker`, payload: JSON.stringify(msg), qos: 0  }; iotdata.publish(params, function(err, data) { if (err) { console.log("error===>>>", err, err.stack); // an error occurred } else { console.log("Ladmbda triggered===>>>", trackerEvent);  // successful response    } }); } }); }
  8. 选择部署以保存您更新的函数。

  9. 选择配置选项卡。

  10. 在“触发器”部分中,单击“添加触发器”。

  11. 在“源”字段中选择 EventBridge (CloudWatch Events)。

  12. 选择“现有规则”单选选项。

  13. 输入类似这样的规则名称:“AmazonLocationMonitor-GEOFENCECOLLECTION_NAME”。

  14. 单击“添加”按钮。

  15. 此时,系统还会在“权限”选项卡中附加“基于资源的策略声明”

MQTT 测试客户端

  1. 打开 https://console.aws.amazon.com/iot/

  2. 在左侧导航窗格中,选择 MQTT 测试客户端。

  3. 您将看到标题为 MQTT 测试客户端的部分,您可以在其中配置 MQTT 连接。

  4. 配置必要的设置后,单击连接按钮,使用提供的参数建立与 MQTT 代理的连接。

  5. 记下端点值。

连接后,您可以使用 MQTT 测试客户端界面中提供的各个输入字段订阅 MQTT 主题或向主题发布消息。接下来,您将附加 MQTT 策略:

  1. 在左侧菜单的管理下,展开安全性选项,然后单击策略

  2. 单击创建策略按钮。

  3. 输入策略名称。

  4. 策略文档上,选择 JSON 选项卡。

  5. 复制粘贴下面显示的策略,但请务必使用您的 REGIONACCOUNT_ID 更新所有元素:

    { "Version": "2012-10-17", "Statement": [     {       "Action": [         "iot:Connect",         "iot:Publish",         "iot:Subscribe",         "iot:Receive"     ],       "Resource": [         "arn:aws:iot:REGION:ACCOUNT_ID:client/${cognito-identity.amazonaws.com:sub}",     "arn:aws:iot:REGION:ACCOUNT_ID:topic/${cognito-identity.amazonaws.com:sub}", "arn:aws:iot:REGION:ACCOUNT_ID:topicfilter/${cognito-identity.amazonaws.com:sub}/", "arn:aws:iot:REGION:ACCOUNT_ID:topic/${cognito-identity.amazonaws.com:sub}/tracker" ], "Effect": "Allow" } ] }
    注意

    记录策略名称和主题名称,以便在后续步骤中使用。

  6. 选择创建按钮完成操作。

完成上述步骤后,现在,您将按如下方式更新访客角色的权限:

  1. 导航至 Amazon Cognito 并打开您的身份池。然后,继续设置用户访问权限并选择访客角色。

  2. 单击权限策略以启用编辑。

    { 'Version': '2012-10-17 ', 'Statement': [ { 'Action': [ 'geo:GetMap*', 'geo:BatchUpdateDevicePosition', 'geo:BatchEvaluateGeofences', 'iot:Subscribe', 'iot:Publish', 'iot:Connect', 'iot:Receive', 'iot:AttachPrincipalPolicy', 'iot:AttachPolicy', 'iot:DetachPrincipalPolicy', 'iot:DetachPolicy' ], 'Resource': [ 'arn:aws:geo:us-east-1:{USER_ID}:map/{MAP_NAME}', 'arn:aws:geo:us-east-1:{USER_ID}:tracker/{TRACKER_NAME}', 'arn:aws:geo:us-east-1:{USER_ID}:geofence-collection/{GEOFENCE_COLLECTION_NAME}', 'arn:aws:iot:us-east-1:{USER_ID}:client/${cognito-identity.amazonaws.com:sub}', 'arn:aws:iot:us-east-1:{USER_ID}:topic/${cognito-identity.amazonaws.com:sub}', 'arn:aws:iot:us-east-1:{USER_ID}:topicfilter/${cognito-identity.amazonaws.com:sub}/*', 'arn:aws:iot:us-east-1:{USER_ID}:topic/${cognito-identity.amazonaws.com:sub}/tracker' ], 'Effect': 'Allow' }, { 'Condition': { 'StringEquals': { 'cognito-identity.amazonaws.com:sub': '${cognito-identity.amazonaws.com:sub}' } }, 'Action': [ 'iot:AttachPolicy', 'iot:DetachPolicy', 'iot:AttachPrincipalPolicy', 'iot:DetachPrincipalPolicy' ], 'Resource': [ '*' ], 'Effect': 'Allow' } ] }
  3. 通过上述策略更改,现在已为应用程序正确配置所有必要的 AWS 资源。

  1. 打开 Android Studio,选择新建,然后选择版本控制中的项目

  2. 导航至 Android Studio 左上角的文件菜单。

  3. 从下拉菜单中选择“新建”。

  4. 选择“版本控制中的项目”。

  5. 输入存储库 URL。在出现的对话框中,找到标有“URL”的字段。

  6. 将示例应用程序的以下 URL 复制并粘贴到此字段中:https://github.com/aws-geospatial/amazon-location-samples-android.git

  7. 确定要将存储库克隆到哪个目录。使用默认目录,或选择自定义位置。

  8. 设置存储库 URL 和目录首选项后,点击“克隆”按钮。Android Studio 会继续将存储库克隆到您指定的位置。

  9. 现在,您已将应用程序克隆到计算机上,可以开始使用它了。

要使用该示例,请按照以下步骤进行操作:

  • 创建 custom.properties

    要配置 custom.properties 文件,请按照以下步骤进行操作:

    1. 打开您的首选文本编辑器或 IDE。

    2. 创建新的文件。

    3. 使用文件名 custom.properties 保存该文件。

    4. 使用以下代码示例更新 custom.properties,并将 MQTT_END_POINTPOLICY_NAMEGEOFENCE_COLLECTION_NAMETOPIC_TRACKER 替换为实际值:

      MQTT_END_POINT=xxxxxxxxxxxxx-xxx.xxx.us-east-1.amazonaws.com POLICY_NAME=xxxxxxxxx GEOFENCE_COLLECTION_NAME=xxxxxxxxxxxxxxxxx TOPIC_TRACKER=xxxxxxxxxx
    5. 清理并重新构建项目。之后,您可以运行项目。

  • 登录

    要登录应用程序,请按照以下步骤进行操作:

    1. 登录按钮。

    2. 提供身份池 ID跟踪器名称地图名称

    3. 再次按登录完成操作。

  • 管理筛选器

    打开配置屏幕,然后执行以下操作:

    1. 使用开关 UI 打开/关闭筛选器。

    2. 需要时更新时间和距离筛选器。

  • 跟踪操作:

    打开跟踪屏幕,然后执行以下操作:

    • 您可以通过按下相应的按钮,在前景、后台或省电模式下开始和停止跟踪。