Android系統類比位置的使用方法_Android

來源:互聯網
上載者:User

本文為大家分享了Android類比位置的使用方法,支援Android6.0,供大家參考,具體內容如下

1、開啟系統設定中的類比位置

Android 6.0 以下:【開發人員選項 -> 允許類比位置】

Android 6.0 及以上:【開發人員選項 -> 選擇類比位置資訊應用】

AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

2、判斷是否開啟了系統類比位置

Android 6.0 以下:使用Settings.Secure.ALLOW_MOCK_LOCATION判斷。

// Android 6.0 以下:是否開啟【允許類比位置】
boolean canMockPosition = Settings.Secure.getInt(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0

Android 6.0 及以上:沒有【允許類比位置】選項,同時棄用了Settings.Secure.ALLOW_MOCK_LOCATION,無法通過上面的方法判斷。增加了【選擇類比位置資訊應用】的方法,需要選擇使用類比位置的應用。但是不知道怎麼擷取當前選擇的應用,因此通過是否能夠成功執行addTestProvider方法來進行判斷,如果沒有選擇當前的應用,則addTestProvider會拋出異常。

boolean hasAddTestProvider = false;boolean canMockPosition = (Settings.Secure.getInt(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0)    || Build.VERSION.SDK_INT > 22;if (canMockPosition && hasAddTestProvider == false) {  try {    String providerStr = LocationManager.GPS_PROVIDER;    LocationProvider provider = 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 (SecurityException e) {    canMockPosition = false;  }}

3、類比位置

private class RunnableMockLocation implements Runnable {  @Override  public void run() {    while (true) {      try {        Thread.sleep(INTERVEL);        if (hasAddTestProvider() == false) {          continue;        }        try {          // 類比位置(addTestProvider成功的前提下)          String providerStr = LocationManager.GPS_PROVIDER;          Location mockLocation = new Location(providerStr);          mockLocation.setLatitude(22);  // 維度(度)          mockLocation.setLongitude(113); // 經度(度)          mockLocation.setAltitude(30);  // 高程(米)          mockLocation.setBearing(180);  // 方向(度)          mockLocation.setSpeed(10);  //速度(米/秒)          mockLocation.setAccuracy(0.1f);  // 精度(米)          mockLocation.setTime(new Date().getTime());  // 本地時間           if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {            mockLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());          }          locationManager.setTestProviderLocation(providerStr, mockLocation);        } catch (Exception e) {          // 防止使用者在軟體運行過程中關閉類比位置或選擇其他應用          stopMockLocation();        }      } catch (InterruptedException e) {        e.printStackTrace();      } catch (Exception e) {        e.printStackTrace();      }    }  }}

4、停止類比位置

/** * 停止類比位置,以免啟用類比資料後無法還原使用系統位置 * 若類比位置未開啟,則removeTestProvider將會拋出異常; * 若已addTestProvider後,關閉類比位置,未removeTestProvider將導致系統GPS無資料更新; */public void stopMockLocation() {  if (hasAddTestProvider) {    try {      locationManager.removeTestProvider(LocationManager.GPS_PROVIDER);    } catch (Exception ex) {      // 若未成功addTestProvider,或者系統類比位置已關閉則必然會出錯    }    hasAddTestProvider = false;  }}

Android Studio Project

以上就是本文的全部內容,希望對大家學習Android軟體編程有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.