基於騰訊位置服務定位實現物業巡檢防做弊場景

前言

在物業管理中,小區內人員巡檢仍是很是常見的工做之一,爲了下降物業的投入,設計了採用掃描二維碼的形式輔助系統檢測每一個員工巡檢的位置,以便進行常規的物業巡檢工做。雖然二維碼既便宜又易用,然而因爲其可拍照和被動的模式,會致使做弊的問題,所以在常規的掃碼中,須要增長定位功能以便輔助系統鑑別做弊行爲。android

系統的方案設計

巡檢任務按照端的不一樣,分爲兩部分,一部分在App內實現,一部分在PC後臺實現,其分工大抵以下:git

  • PC端: 對巡檢任務進行定義並分派,不一樣的人員分派不一樣的巡檢任務。當人員經過app進行巡檢後,後臺能夠查詢任務的完成狀況,經過二維碼肯定每一個巡檢點都巡檢過,經過人員的位置歷史對巡檢任務的人員軌跡進行回放。由於沒有引入電子圍欄,因此只能按照軌跡人工判斷是否做弊。不過自己防止做弊的問題就是一種威懾,所以效果並不會太差。
  • App端:人員經過App進行登陸,登陸後獲取本身的巡檢任務,按照巡檢的指示,對各個巡檢點進行掃碼打卡。app在打開後開啓連續定位,並按照必定的速率定時上傳到位置庫。

image.png

因爲是應用在小區的巡檢工做中,所以對於定位的精度仍是有很大要求的,至少不能誤差太多。web

騰訊位置服務SDK集成

Android下集成sdk

技術選型爲Android定位SDK室內服務服務器

一、解壓sdk,先放jar包到libs網絡

image.png

二、安放so 到 jniLibsapp

image.png

三、配置項目gradle配置和模塊gradle配置maven

google()
jcenter()
 mavenCentral()

image.png

再修改模塊gradle配置ide

image.png

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>

五、同步下項目gradle

點擊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);
    }
}

七、連續定位開啓
放在了 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>

image.png

做者:webmote

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

來源:CSDN

著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

相關文章
相關標籤/搜索