在物业管理中,小区内人员巡检仍是很是常见的工做之一,为了下降物业的投入,设计了采用扫描二维码的形式辅助系统检测每一个员工巡检的位置,以便进行常规的物业巡检工做。虽然二维码既便宜又易用,然而因为其可拍照和被动的模式,会致使做弊的问题,所以在常规的扫码中,须要增长定位功能以便辅助系统鉴别做弊行为。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
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。