前言

在物业管理中,小区内人员巡检还是十分常见的工作之一,为了升高物业的投入,设计了采纳扫描二维码的模式辅助零碎检测每个员工巡检的地位,以便进行惯例的物业巡检工作。尽管二维码既便宜又易用,然而因为其可拍照和被动的模式,会导致舞弊的问题,因而在惯例的扫码中,须要减少定位性能以便辅助零碎甄别舞弊行为。

零碎的方案设计

巡检工作依照端的不同,分为两局部,一部分在App内实现,一部分在PC后盾实现,其分工大抵如下:

  • PC端: 对巡检工作进行定义并分派,不同的人员分派不同的巡检工作。当人员通过app进行巡检后,后盾能够查问工作的实现状况,通过二维码确定每个巡检点都巡检过,通过人员的地位历史对巡检工作的人员轨迹进行回放。因为没有引入电子围栏,所以只能依照轨迹人工判断是否舞弊。不过自身避免舞弊的问题就是一种威慑,因而成果并不会太差。
  • App端:人员通过App进行登录,登录后获取本人的巡检工作,依照巡检的批示,对各个巡检点进行扫码打卡。app在关上后开启间断定位,并依照肯定的速率定时上传到地位库。

因为是利用在小区的巡检工作中,因而对于定位的精度还是有很大要求的,至多不能偏差太多。

腾讯位置服务SDK集成

Android下集成sdk

技术选型为Android定位SDK和室内服务

1、解压sdk,先放jar包到libs

2、安放so 到 jniLibs

3、配置我的项目gradle配置和模块gradle配置

google()jcenter() mavenCentral()

再批改模块gradle配置

dependencies {    implementation fileTree(include: ['*.jar'], dir: 'libs')}

4、给予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>

5、同步下我的项目

点击Android Studio的文件菜单内的Sync Project With Gradle Files.

6、自定义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    }}

腾讯地图轨迹回放

有了地址的反对,地图轨迹回放就非常容易了,腾讯提供了动静轨迹,能够参考如下代码。

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>

作者:webmote

链接:https://webmote.blog.csdn.net...

起源:CSDN

著作权归作者所有。商业转载请分割作者取得受权,非商业转载请注明出处。