基于安卓实现的模拟定位功能(Android)
源碼下載地址:https://download.csdn.net/download/sheziqiong/85628133
Android 實現模擬地圖定位功能
實現原理:
??手機定位方式目前有4種:基站定位,WIFI定位,GPS定位,AGPS定位。
??本工程利用手機自帶的"模擬位置"功能實現運行時修改LocationManager結果。
??原理:使用android自帶的調試api,模擬gps provider的結果。
??Android 6.0系統以下,可以通過Setting.Secure.ALLOW_MOCK_LOCATION獲取是否【允許模擬位置】,當【允許模擬位置】開啟時,可addTestProvider;
??Android 6.0系統及以上,棄用Setting.Secure.ALLOW_MOCK_LOCATION變量,沒有【允許模擬位置】選項,
增加【選擇模擬位置信息應用】,此時需要選擇當前應用,才可以addTestProvider,
但未找到獲取當前選擇應用的方法,因此通過addTestProvider是否成功來判斷是否可用模擬位置。
代碼分析:
MockLocationManager:模擬地址管理類
??首先通過Android系統模擬位置管理器LocationManager獲取系統模擬位置服務,Android 6.0以下,通過Setting.Secure.ALLOW_MOCK_LOCATION判斷是否可模擬位置,Android 6.0及以上,需要【選擇模擬位置信息應用】,未找到方法,因此通過addTestProvider是否可用判斷。
??注冊位置服務,獲取系統位置
// 注冊位置服務,獲取系統位置if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {// ActivityCompat#requestPermissions// here to request the missing permissions, and then overriding// public void onRequestPermissionsResult(int requestCode, String[] permissions,// int[] grantResults)// to handle the case where the user grants the permission. See the documentation// for ActivityCompat#requestPermissions for more details.return;}mockLocationManager.locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);??最后通過LocationListener.onLocationChanged()回調方法獲取GPS定位數據:
private LocationListener locationListener = new LocationListener() {@Overridepublic void onLocationChanged(final Location location) {setLocationData(location);}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}@Overridepublic void onProviderEnabled(String provider) {}@Overridepublic void onProviderDisabled(String provider) {}};/*** 獲取到模擬定位信息,并顯示** @param location 定位信息*/private void setLocationData(Location location) {tvProvider.setText(location.getProvider());tvTime.setText(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(location.getTime())));tvLatitude.setText(location.getLatitude() + " °");tvLongitude.setText(location.getLongitude() + " °");}使用模擬定位需先開啟系統設置中的模擬位置:
- Android 6.0 以下:【開發者選項 -> 允許模擬位置】
- Android 6.0 及以上:【開發者選項 -> 選擇模擬位置信息應用】
參考鏈接:
- 1、【科普】GPS、Wifi等各種手機定位方式的含義及原理詳解
- 2、Android 使用模擬位置(支持Android 6.0)
- 3、http://www.biyezuopin.vip
源碼下載地址:https://download.csdn.net/download/sheziqiong/85628133
總結
以上是生活随笔為你收集整理的基于安卓实现的模拟定位功能(Android)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse 中文乱码
- 下一篇: Windows 2003下网络负载平衡(