创建 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 位置条款和条件,然后选择创建地图。创建地图后,您可以通过放大、缩小或向任意方向平移来与地图进行交互。

使用 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. 在左侧导航窗格中,选择 Geofence 集合。

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

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

  5. 在以目标 CloudWatch 为目标的 EventBridge 规则下,您可以创建一条可选 EventBridge 规则来开始对地理围栏事件做出反应。这样,Amazon Location 就可以将事件发布到亚马逊 CloudWatch 日志。

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

使用 Amazon 位置创建地理围栏集合: APIs

使用 Amazon 定位地理围 APIs栏中的 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 位置将追踪器资源链接到地理围栏集合: APIs

使用 Amazon 位置追踪器 APIs中的AsssociateTrackerConsumer 操作。以下示例使用一个 API 请求,该请求使用其亚马逊资源名称 (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 APIs。要使用控制台创建 Lambda 函数,将位置更新发布到 Amazon Location,请执行以下操作:

  1. 打开 AWS Lambda 控制台,网址为 https://console.aws.amazon.com/lambda/。

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

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

  4. 填写以下选框:

    • a 函数名

    • 在 “运行时” 选项中,选择 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 事件)。

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

  13. 输入这样的规则名称 `-GEOFENCECOLLECTION_NAM AmazonLocationMonitor E`。

  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_NAME、、和TOPIC_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. on/off 使用切换界面切换过滤器。

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

  • 跟踪操作

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

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