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

高德地图 猎鹰组件 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/.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335