在物业管理中,小区内人员巡检还是非常常见的工作之一,为了降低物业的投入,我们设计了二维码方式,采用扫描二维码的形式辅助系统检测每个员工巡检的位置,以便进行常规的物业巡检工作。虽然二维码既便宜又易用,然而由于其可拍照和被动的模式,会导致作弊的问题,因此在常规的扫码中,需要增加定位功能以便辅助系统鉴别作弊行为。
1、系统的方案设计
巡检任务按照端的不同,我们分为2部分,1部分在App内实现,1部分在PC后台实现,其分工大抵如下:
- PC端: 对巡检任务进行定义并分派,不同的人员分派不同的巡检任务。当人员通过app进行巡检后,后台可以查询任务的完成情况,通过二维码确定每个巡检点都巡检过,通过人员的位置历史对巡检任务的人员轨迹进行回放。因为没有引入电子围栏,所以只能按照轨迹人工判断是否作弊。不过本身防止作弊的问题就是一种威慑,因此效果并不会太差。
- App端:人员通过App进行登录,登录后获取自己的巡检任务,按照巡检的指示,对各个巡检点进行扫码打卡。app在打开后开启连续定位,并按照一定的速率定时上传到位置库。
由于是应用在小区的巡检工作中,因此对于定位的精度还是有很大要求的,至少不能偏差太多。
2、腾讯位置服务介绍
想免费体验的, 来来来,点击这里,免费试用哦~~ 腾讯在地图位置定位上已经耕耘了很多年。虽然导航场景内一般都会选择百度,但对于这种与后台服务相关的定位,腾讯的服务还是有很大优势的,特别是我们的服务器采用的也是腾讯云服务器。
通过百度可以知道,腾讯位置服务拥有日均超过450亿次定位调用,在微信、手机QQ、京东、滴滴出行、新美大等多个在各自行业具有领先地位的产品中进行了深度应用,建立了基于位置的智慧大数据生态,可以说每一部普通用户的智能手机都在使用腾讯位置服务。其中,在物流这一重度依赖位置服务的行业中,腾讯位置服务起到了优化流程,提高行业效率的作用。以业界领先的京东物流系统为例,采用腾讯位置服务后,其预分拣效率进一步提升了9%。
腾讯打造的很多app都是超级流量的App,因此在地图定位方面,其服务的稳定性还是很有保证的。因此我们这里选用腾讯的位置服务进行技术POC。
3、腾讯位置服务SDK集成
App是我们的终端收集器,因此能否快速集成到App上,也是我们的一大考量。我大致看了下教程就开始动手了,对不起大家哦,我不是Android的开发人员,可能集成的速度并不是很快,大概花了2个小时就搞定了集成。
对于一个生手来说,已经是非常快的了,后面的具体业务就可以交给开发人员做了。
3.1 Android下集成sdk
我是用的是Android Studio和百度位置服务 7.2.8,具体下载的地址在这里。文档在这里。
- 解压sdk,先放jar包到libs
- 安放so 到 jniLibs
直接拷贝过去就行。
- 配置项目gradle配置和模块gradle配置 修改的内容如下图所示,为了方便拷贝,我拷贝了一份。
google()
jcenter()
mavenCentral()
再修改模块gradle配置
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
}
- 给予App相应的权限 修改AndroidManifest.xml文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.pms">
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="true"
android:theme="@style/Theme.Pms">
<activity
android:name=".ui.login.LoginActivity"
android:label="@string/title_activity_login">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name">
</activity>
<meta-data android:name="TencentMapSDK" android:value="你的key,你的key,这个不配获取不了坐标位置" />
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 通过GPS得到精确位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 通过网络得到粗略位置 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 访问网络. 某些位置信息需要从网络服务器获取 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 访问WiFi状态. 需要WiFi信息用于网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 修改WiFi状态. 发起WiFi扫描, 需要WiFi信息用于网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 访问网络状态, 检测网络的可用性. 需要网络运营商相关信息用于网络定位 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 访问网络的变化, 需要某些信息用于网络定位 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<!-- 访问手机当前状态, 需要device id用于网络定位 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 支持A-GPS辅助定位 -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!-- 用于 log 日志 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
-
同步下项目 点击Android Studio的文件菜单内的Sync Project With Gradle Files.
-
自定义Application,在里面增加位置服务的初始化。
package com.example.pms;
import android.app.Application;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.cache.CacheEntity;
import com.lzy.okgo.cache.CacheMode;
import com.lzy.okgo.https.HttpsUtils;
import com.lzy.okgo.interceptor.HttpLoggingInterceptor;
import com.lzy.okgo.model.HttpHeaders;
import com.tencent.map.geolocation.TencentLocationManager;
public class MyApplication extends Application {
public static MyApplication app;
public static MyApplication getInstance(){
return app;
}
public TencentLocationManager mLocationManager;
@Override
public void onCreate() {
super.onCreate();
app = this;
//初始化,easy的很~~~
mLocationManager = TencentLocationManager.getInstance(this);
}
}
7.连续定位开启 我是放在了 MainActivity内。
import android.os.Bundle;
import android.util.Log;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.tencent.map.geolocation.TencentLocation;
import com.tencent.map.geolocation.TencentLocationListener;
import com.tencent.map.geolocation.TencentLocationRequest;
//实现接口定义 TencentLocationListener 监控位置信息
public class MainActivity extends AppCompatActivity implements TencentLocationListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//建立请求
TencentLocationRequest request = TencentLocationRequest.create();
//我们只需要经纬度和地址名称
request. setRequestLevel(TencentLocationRequest. REQUEST_LEVEL_NAME);
//允许使用GPS
request.setAllowGPS(true);
//需要开启室内定位
request.setIndoorLocationMode(true);
//请求连续定位,这里默认是10s间隔定时推送位置信息。
MyApplication.getInstance().mLocationManager.requestLocationUpdates(request, this);
}
@Override
public void onLocationChanged(TencentLocation location, int error, String reason) {
// do your work
String s = String.format("%s %s (%f %f %f)",location.getAddress(),location.getName(),location.getLatitude(),location.getLongitude(),location.getAltitude());
Log.i("location",s);
}
@Override
public void onStatusUpdate(String name, int status, String desc) {
// do your work
}
}
嗯嗯,这个运行起来,非常完美,可以愉快的记录位置了。
4、腾讯地图轨迹回放
有了地址的支持,地图轨迹回放就非常容易了,腾讯提供了动态轨迹,可以参考如下代码。
function initMap() {
var center = new TMap.LatLng(39.984104, 116.307503);
//初始化地图
var map = new TMap.Map("container", {
zoom:12,//设置地图缩放级别
center: center,//设置地图中心点坐标
mapStyleId: "style1" //个性化样式
});
//初始化轨迹图并添加至map图层
new TMap.visualization.Trail({
pickStyle:function(item){ //轨迹图样式映射函数
return {
width: 2
}
},
startTime: 0,//动画循环周期的起始时间戳
showDuration: 120,//动画中轨迹点高亮的持续时间
playRate:30 // 动画播放倍速
})
.addTo(map)
.setData(trailData);//设置数据
}
</script>
5、总结
有了定位和轨迹的加入,我们的巡检巡逻总算是有了很大的保障。利用腾讯的位置服务,集成起来是非常的快哦~,这就是腾讯服务的特色:文档清晰,接口简单,集成迅速。哈哈,选择它,没有错,你动心了吗? 来来来,点击这里,免费试用哦~~