在物業管理中,小區內人員巡檢仍是很是常見的工做之一,爲了下降物業的投入,設計了採用掃描二維碼的形式輔助系統檢測每一個員工巡檢的位置,以便進行常規的物業巡檢工做。雖然二維碼既便宜又易用,然而因爲其可拍照和被動的模式,會致使做弊的問題,所以在常規的掃碼中,須要增長定位功能以便輔助系統鑑別做弊行爲。android
巡檢任務按照端的不一樣,分爲兩部分,一部分在App內實現,一部分在PC後臺實現,其分工大抵以下:git
因爲是應用在小區的巡檢工做中,所以對於定位的精度仍是有很大要求的,至少不能誤差太多。web
技術選型爲Android定位SDK和室內服務服務器
一、解壓sdk,先放jar包到libs網絡
二、安放so 到 jniLibsapp
三、配置項目gradle配置和模塊gradle配置maven
google() jcenter() mavenCentral()
再修改模塊gradle配置ide
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>
做者:webmote
連接:https://webmote.blog.csdn.net...
來源:CSDN
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。