Android系統模擬位置的使用方法 - 程式前沿

文章推薦指數: 80 %
投票人數:10人

本文為大家分享了Android模擬位置的使用方法,支援Android6.0, ... Android 6.0 及以上:沒有【允許模擬位置】選項,同時棄用了Settings.Secure. 程式語言前端開發IOS開發Android開發雲端運算人工智慧伺服器搜尋資料庫軟體開發工具Android系統模擬位置的使用方法2018.07.03Android開發android,模擬位置HOMEAndroid開發Android系統模擬位置的使用方法Advertisement本文為大家分享了Android模擬位置的使用方法,支援Android6.0,供大家參考,具體內容如下1、開啟系統設定中的模擬位置Android6.0以下:【開發者選項->允許模擬位置】Android6.0及以上:【開發者選項->選擇模擬位置資訊應用】AndroidManifest.xml 2、判斷是否開啟了系統模擬位置Android6.0以下:使用Settings.Secure.ALLOW_MOCK_LOCATION判斷。

//Android6.0以下:是否開啟【允許模擬位置】booleancanMockPosition=Settings.Secure.getInt(getContentResolver(),Settings.Secure.ALLOW_MOCK_LOCATION,0)!=0Android6.0及以上:沒有【允許模擬位置】選項,同時棄用了Settings.Secure.ALLOW_MOCK_LOCATION,無法通過上面的方法判斷。

增加了【選擇模擬位置資訊應用】的方法,需要選擇使用模擬位置的應用。

但是不知道怎麼獲取當前選擇的應用,因此通過是否能夠成功執行addTestProvider方法來進行判斷,如果沒有選擇當前的應用,則addTestProvider會丟擲異常。

booleanhasAddTestProvider=false; booleancanMockPosition=(Settings.Secure.getInt(getContentResolver(),Settings.Secure.ALLOW_MOCK_LOCATION,0)!=0) ||Build.VERSION.SDK_INT>22; if(canMockPosition&&hasAddTestProvider==false){ try{ StringproviderStr=LocationManager.GPS_PROVIDER; LocationProviderprovider=locationManager.getProvider(providerStr); if(provider!=null){ locationManager.addTestProvider( provider.getName() ,provider.requiresNetwork() ,provider.requiresSatellite() ,provider.requiresCell() ,provider.hasMonetaryCost() ,provider.supportsAltitude() ,provider.supportsSpeed() ,provider.supportsBearing() ,provider.getPowerRequirement() ,provider.getAccuracy()); }else{ locationManager.addTestProvider( providerStr ,true,true,false,false,true,true,true ,Criteria.POWER_HIGH,Criteria.ACCURACY_FINE); } locationManager.setTestProviderEnabled(providerStr,true); locationManager.setTestProviderStatus(providerStr,LocationProvider.AVAILABLE,null,System.currentTimeMillis()); //模擬位置可用 hasAddTestProvider=true; canMockPosition=true; }catch(SecurityExceptione){ canMockPosition=false; } } 3、模擬位置 privateclassRunnableMockLocationimplementsRunnable{ @Override publicvoidrun(){ while(true){ try{ Thread.sleep(INTERVEL); if(hasAddTestProvider()==false){ continue; } try{ //模擬位置(addTestProvider成功的前提下) StringproviderStr=LocationManager.GPS_PROVIDER; LocationmockLocation=newLocation(providerStr); mockLocation.setLatitude(22);//維度(度) mockLocation.setLongitude(113);//經度(度) mockLocation.setAltitude(30);//高程(米) mockLocation.setBearing(180);//方向(度) mockLocation.setSpeed(10);//速度(米/秒) mockLocation.setAccuracy(0.1f);//精度(米) mockLocation.setTime(newDate().getTime());//本地時間 if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.JELLY_BEAN_MR1){ mockLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos()); } locationManager.setTestProviderLocation(providerStr,mockLocation); }catch(Exceptione){ //防止使用者在軟體執行過程中關閉模擬位置或選擇其他應用 stopMockLocation(); } }catch(InterruptedExceptione){ e.printStackTrace(); }catch(Exceptione){ e.printStackTrace(); } } } } 4、停止模擬位置 /** *停止模擬位置,以免啟用模擬資料後無法還原使用系統位置 *若模擬位置未開啟,則removeTestProvider將會丟擲異常; *若已addTestProvider後,關閉模擬位置,未removeTestProvider將導致系統GPS無資料更新; */ publicvoidstopMockLocation(){ if(hasAddTestProvider){ try{ locationManager.removeTestProvider(LocationManager.GPS_PROVIDER); }catch(Exceptionex){ //若未成功addTestProvider,或者系統模擬位置已關閉則必然會出錯 } hasAddTestProvider=false; } } AndroidStudioProjectAdvertisementAdvertisement写评论取消回覆很抱歉,必須登入網站才能發佈留言。

近期文章Vue中容易被忽視的知識點2019.12.09if我是前端Leader,談談前端框架體系建設2019.12.09Spark入門(一)用SparkShell初嘗Spark滋味2019.12.08Spark入門(二)如何用Idea運行我們的Spark項目2019.12.08Spark入門(三)Spark經典的單詞統計2019.12.08Spark入門(四)Spark的map、flatMap、mapToPair2019.12.08Spark入門(五)Spark的reduce和reduceByKey2019.12.08Spark入門(六)Spark的combineByKey、sortBykey2019.12.08Spark入門(七)Spark的intersection、subtract、union和distinct2019.12.08Spark實戰尋找5億次訪問中,訪問次數最多的人2019.12.08AdvertisementAdvertisement



請為這篇文章評分?