美文网首页
Fluttify一周一插件 之 高德猎鹰 Flutter插件

Fluttify一周一插件 之 高德猎鹰 Flutter插件

作者: 小山包 | 来源:发表于2020-09-18 09:42 被阅读0次

高德地图 猎鹰组件 Flutter插件

demo apk下载 demo apk下载 demo apk下载

Fluttify系列插件

Fluttify系列插件

名称 描述 仓库
高德地图 高德地图地图组件, 提供地图控件 [图片上传失败...(image-833a67-1600393466104)]
高德定位 高德地图定位组件, 提供独立的定位功能 [图片上传失败...(image-cb22ad-1600393466104)]
高德搜索 高德地图搜索组件, 提供poi搜索等功能 [图片上传失败...(image-1b71b0-1600393466104)]
高德猎鹰 高德地图猎鹰组件, 提供实时定位采集功能 [图片上传失败...(image-b0af98-1600393466104)]
百度地图 百度地图, 包含了地图控件, 定位以及搜索poi等功能 [图片上传失败...(image-ff13d4-1600393466104)]
百度人脸识别 百度人脸识别, 提供活体检测等功能 [图片上传失败...(image-a95037-1600393466104)]
网易直播 网易直播推流组件 [图片上传失败...(image-47eaa0-1600393466104)]
网易云信 网易云信 IM组件 [图片上传失败...(image-f9e8a8-1600393466104)]
腾讯直播 腾讯直播, 包含推流组件和播放组件 [图片上传失败...(image-91472e-1600393466104)]
腾讯IM 腾讯IM组件 [图片上传失败...(image-805e6-1600393466104)]
腾讯地图 腾讯地图组件 [图片上传失败...(image-afd15a-1600393466104)]
讯飞语音合成 腾讯语言合成组件, 提供文字转语言功能 [图片上传失败...(image-404415-1600393466104)]
极光统计 极光统计组件, 提供异常上报等功能 [图片上传失败...(image-e7f940-1600393466104)]
阿里云RTC 阿里云实时音视频 [图片上传失败...(image-cf3ae2-1600393466104)]
环信 环信IM [图片上传失败...(image-748712-1600393466104)]
未完待续... 如有其它需求, 请联系qq 382146139 [图片上传失败...(image-6a5fe5-1600393466104)]

依赖

dependencies:
  flutter:
    sdk: flutter
  # 社区版
  amap_track_fluttify: ^x.x.x
  # 专业版 授权后可依赖
  amap_track_fluttify:
    git:
      url: git@github.com:yohom/amap_track_fluttify.git

配置

Android

  1. AndroidManifest.xml<application>标签下配置从高德开发者后台申请的key.
<application
    android:name="io.flutter.app.FlutterApplication"
    android:label="amap_track_fluttify_example"
    android:icon="@mipmap/ic_launcher">
    <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="你的key"/>
    <!--... 其他内容-->
</application>
  1. 注意在app/build.gradle的android块中配置签名信息, 并在buildTypes块中指定签名信息, 否则将无法匹配到你在高德后台配置的key, 例如:
android {
    signingConfigs {
        release {
            keyAlias 'amap_track_demo'
            keyPassword 'amap_track_demo'
            storeFile file('../amap_track_demo.jks')
            storePassword 'amap_track_demo'
        }
    }

    buildTypes {
        debug {
            signingConfig signingConfigs.release
        }
        profile {
            signingConfig signingConfigs.release
        }
        release {
            signingConfig signingConfigs.release
        }
    }
}
  1. 由于猎鹰SDK直接包含了定位SDK的代码, 导致不能与定位SDK共存, 解决方案为:
    1. 使用Android Studio打开android工程;
    2. 找到amap_location_fluttify模块的build.gradle文件;
    3. 74行, 修改api 'com.amap.api:location:5.1.0'compileOnly 'com.amap.api:location:5.1.0'; 此处修改意为"只在编译期间可见定位SDK, 不包含在最终的apk中", 所以能解决猎鹰SDK和定位SDK的冲突.
    4. 此处修改为临时改动, 当定位插件版本升级时, 会覆盖掉此处的修改, 所以当定位插件升级时, 要留意这里, 需要重新改动回compileOnly;
  2. 权限无需另外申明, 定位服务组件无需另外声明, 已在插件中引入;
  3. 无需再处理混淆, 已在插件中配置混淆规则;

iOS

  1. 与Android端不同, iOS端的初始化需要在AmapTrack.instance.init方法中传入, 具体参考wiki;
  2. 定位需要声明权限, 在Info.plist中添加:
<key>NSLocationWhenInUseUsageDescription</key>
<string>需要定位权限</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>需要定位权限</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>需要定位权限</string>
  1. 配置后台定位:
    1. 左侧目录中选中工程名,开启 TARGETS->Capabilities->Background Modes;
    2. 在 Background Modes中勾选 Location updates,如下图所示: [图片上传失败...(image-fc6abf-1600393328389)]

导入

import 'package:amap_track_fluttify/amap_track_fluttify.dart';

使用

初始化

初始化方法为

AmapTrack.instance.init(String iosKey, int serviceId);

其中iosKey为在高德开发者后台创建的key,serviceId需要开发者自行调用(使用比如Postman等类似的工具)高德提供的rest api接口获取,详情请参考 https://lbs.amap.com/api/track/lieying-kaifa/api/service .
Android端配置key请参考README.

配置猎鹰SDK

配置定位采集周期和上报周期:

猎鹰sdk默认的定位信息采集周期是2s,默认的上报周期是20s,也就是最快2s记录一次当前位置信息(若位置没有变化,这次位置信息会被忽略),20s上报一次记录下的这些信息。下面方法修改该配置:

AmapTrack.instance.changeGatherAndPackTimeInterval(gatherTimeInterval: Duration(seconds: 2), packTimeInterval: Duration(seconds: 20));

配置本地缓存大小:

猎鹰sdk会在无法正常上报轨迹点时将未成功上报的轨迹点缓存在本地,默认最多缓存50MB数据。

AmapTrack.instance.setLocalCacheMaxSize(50); // 单位为MB

开始轨迹上报

在启动轨迹上报服务(service id)时,需要提供终端(terminal id)信息,然后调用 AmapTrack.instance.startService(int terminalId, {int trackId}) 方法。

每个终端(terminal id)都对应您的业务中一个唯一的实体,在该终端第一次启动轨迹上报服务前,应该首先使用一个唯一标识该终端的名称创建该终端,获取终端id;若该终端(terminal id)不是第一次启动轨迹上报服务,则可以直接使用终端名称查询对应终端id。

获取终端(terminal id)

try {
  QueryTerminalResponse response = await AmapTrack.instance.queryTerminal('terminalName');
} catch (e) {
  print(e);
}

返回类型为QueryTerminalResponse,含有一个terminalId字段,如果该字段值不为-1,则说明已有该名称的终端,可以直接使用,否则需要先创建该终端。

创建终端

try {
  int terminalId = await AmapTrack.instance.addTerminal('terminalName');
} catch (e) {
  print(e);
}

上面的调用会创建一个名为terminalName的终端,并返回对应的终端id(terminalId),以供后续操作。

启动上报服务(service id)

要开启定位采集,需要首先启动轨迹上报服务,等服务启动成功后才能开启定位采集:

// 注意需要先申请权限
final status = await Permission.location.request();
if (status.isGranted) {
  try {
    await AmapTrack.instance.startService(_terminalId); // _terminalId为addTerminal方法返回的terminalId
    print('寻迹服务开启成功');
  } catch (e) {
    print(e);
  }
} else {
  print('需要定位权限');
}

上报到指定轨迹

仅提供了服务id和终端id,而没有指定要将轨迹点上报到哪个轨迹上,这种上报方式叫做散点上报,所有轨迹点直接关联到终端,不属于任何一个轨迹。这部分将在此基础上说明如何创建轨迹、如何将轨迹点上报到指定轨迹上。

创建轨迹

要将轨迹点上报的指定的轨迹上,首先需要创建一个轨迹,得到新创建轨迹的轨迹id用于开启轨迹上报服务。每个轨迹都属于某个终端,因此创建时需要指定服务id及终端id。

如果您希望后续每次上报轨迹点时,都上报到之前创建的某条轨迹上,那么您在创建轨迹后,应该想办法记录下轨迹id,以便后续使用。

try {
  int trackId = await AmapTrack.instance.addTrack(_terminalId);
} catch (e) {
  print(e);
}

开启轨迹上报时,指定轨迹id

在开启轨迹上报前,将轨迹id传递给AmapTrack.instance.startService(_terminalId, trackId: trackId)即可。

查询终端实时位置

可以使用服务id和终端id查询某个终端最后一次上报的位置信息。

try {
  final TrackPoint point = await AmapTrack.instance.queryLastPoint(_terminalId);
} catch (e) {
  print(e);
}

返回对象TrackPoint包含经纬度,时间,精度,方向,高度和速度信息,具体参考类TrackPoint

查询终端行驶里程

下面的代码查询某个终端在最近一天内的行驶里程:

try {
  final now = DateTime.now();
  final distance = await AmapTrack.instance.queryDistance(
    _terminalId,
    startTime: now.subtract(Duration(days: 1)),
    endTime: now,
  );
} catch (e) {
  print(e);
}

返回对象为以为单位的距离信息。

查询终端历史轨迹

查询终端历史轨迹有两种方式,一种会查出终端的所有轨迹的轨迹点,包括不属于任何一个轨迹的散点,并将这些轨迹点按照上传时间排序;另一种会按照轨迹查出每个轨迹下的轨迹点或特定轨迹下的轨迹点,散点不包含在内。

查询终端所有轨迹点

下面的代码查询出某个终端在最近一天内上传的所有轨迹点:

try {
  final now = DateTime.now();
  final HistoryTrack trackHistory = await AmapTrack.instance.queryHistoryTrack(
    _terminalId,
    startTime: now.subtract(Duration(days: 1)),
    endTime: now,
  );
} catch (e) {
  print(e);
}

返回对象包含轨迹点列表,点数量和距离信息。

社区

QQ群 938842596
<img src="https://github.com/fluttify-project/fluttify-project/blob/master/resources/1593774713224_temp_qrcode_share_9993.png?raw=true" height="300">

社区版与专业版

显示地图 社区版 专业版
开启寻迹服务
开始收集上报轨迹数据
停止收集上报轨迹数据
停止寻迹服务
根据终端名称创建终端
根据终端名称查询终端信息
查询最后一次上报的位置
获得当前设置的轨迹id ☑️
创建轨迹 ☑️
查询终端行驶里程 ☑️
查询终端历史轨迹 ☑️
查询终端下属于某个轨迹的轨迹点 ☑️
配置定位采集周期和上报周期 ☑️
配置本地缓存大小 ☑️

LICENSE

Copyright (C) 2020 yohom

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see https://www.gnu.org/licenses/.

相关文章

网友评论

      本文标题:Fluttify一周一插件 之 高德猎鹰 Flutter插件

      本文链接:https://www.haomeiwen.com/subject/cavdyktx.html