欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android系統(tǒng)模擬位置的使用方法

 更新時(shí)間:2016年05月13日 10:38:37   作者:doris_d  
這篇文章主要為大家詳細(xì)介紹了Android系統(tǒng)模擬位置的使用方法,具有參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了Android模擬位置的使用方法,支持Android6.0,供大家參考,具體內(nèi)容如下

1、開啟系統(tǒng)設(shè)置中的模擬位置

Android 6.0 以下:【開發(fā)者選項(xiàng) -> 允許模擬位置】

允許模擬位置

Android 6.0 及以上:【開發(fā)者選項(xiàng) -> 選擇模擬位置信息應(yīng)用】

選擇模擬位置信息應(yīng)用

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、判斷是否開啟了系統(tǒng)模擬位置

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 及以上:沒有【允許模擬位置】選項(xiàng),同時(shí)棄用了Settings.Secure.ALLOW_MOCK_LOCATION,無法通過上面的方法判斷。增加了【選擇模擬位置信息應(yīng)用】的方法,需要選擇使用模擬位置的應(yīng)用。但是不知道怎么獲取當(dāng)前選擇的應(yīng)用,因此通過是否能夠成功執(zhí)行addTestProvider方法來進(jìn)行判斷,如果沒有選擇當(dāng)前的應(yīng)用,則addTestProvider會(huì)拋出異常。

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); // 經(jīng)度(度)
          mockLocation.setAltitude(30);  // 高程(米)
          mockLocation.setBearing(180);  // 方向(度)
          mockLocation.setSpeed(10);  //速度(米/秒)
          mockLocation.setAccuracy(0.1f);  // 精度(米)
          mockLocation.setTime(new Date().getTime());  // 本地時(shí)間 
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            mockLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
          }
          locationManager.setTestProviderLocation(providerStr, mockLocation);
        } catch (Exception e) {
          // 防止用戶在軟件運(yùn)行過程中關(guān)閉模擬位置或選擇其他應(yīng)用
          stopMockLocation();
        }
      } catch (InterruptedException e) {
        e.printStackTrace();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
}

4、停止模擬位置

/**
 * 停止模擬位置,以免啟用模擬數(shù)據(jù)后無法還原使用系統(tǒng)位置
 * 若模擬位置未開啟,則removeTestProvider將會(huì)拋出異常;
 * 若已a(bǔ)ddTestProvider后,關(guān)閉模擬位置,未removeTestProvider將導(dǎo)致系統(tǒng)GPS無數(shù)據(jù)更新;
 */
public void stopMockLocation() {
  if (hasAddTestProvider) {
    try {
      locationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
    } catch (Exception ex) {
      // 若未成功addTestProvider,或者系統(tǒng)模擬位置已關(guān)閉則必然會(huì)出錯(cuò)
    }
    hasAddTestProvider = false;
  }
}

Android Studio Project

系統(tǒng)原生位置

模擬位置

以上就是本文的全部內(nèi)容,希望對(duì)大家學(xué)習(xí)Android軟件編程有所幫助。

相關(guān)文章

  • Android模擬美團(tuán)客戶端進(jìn)度提示框

    Android模擬美團(tuán)客戶端進(jìn)度提示框

    這篇文章主要為大家詳細(xì)介紹了Android模擬美團(tuán)客戶端進(jìn)度提示框的實(shí)現(xiàn)過程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-09-09
  • Android實(shí)現(xiàn)ImageView陰影和圖層效果

    Android實(shí)現(xiàn)ImageView陰影和圖層效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)ImageView陰影和圖層效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android自定義密碼輸入框和數(shù)字鍵盤

    Android自定義密碼輸入框和數(shù)字鍵盤

    這篇文章主要為大家詳細(xì)介紹了Android自定義密碼輸入框和數(shù)字鍵盤的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android?應(yīng)用程序的啟動(dòng)流程示例詳解

    Android?應(yīng)用程序的啟動(dòng)流程示例詳解

    這篇文章主要為大家介紹了Android?應(yīng)用程序的啟動(dòng)流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Android手機(jī)開發(fā)設(shè)計(jì)之記事本功能

    Android手機(jī)開發(fā)設(shè)計(jì)之記事本功能

    這篇文章主要為大家詳細(xì)介紹了Android手機(jī)開發(fā)設(shè)計(jì)之記事本功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Android實(shí)現(xiàn)登錄界面的注冊(cè)功能

    Android實(shí)現(xiàn)登錄界面的注冊(cè)功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)登錄界面的注冊(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 解決android studio引用遠(yuǎn)程倉庫下載慢(JCenter下載慢)

    解決android studio引用遠(yuǎn)程倉庫下載慢(JCenter下載慢)

    這篇文章主要介紹了解決android studio引用遠(yuǎn)程倉庫下載慢(JCenter下載慢),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Android Socket實(shí)現(xiàn)多個(gè)客戶端聊天布局

    Android Socket實(shí)現(xiàn)多個(gè)客戶端聊天布局

    這篇文章主要為大家詳細(xì)介紹了Android Socket實(shí)現(xiàn)多個(gè)客戶端聊天布局,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android開發(fā)之TableLayout表格布局

    Android開發(fā)之TableLayout表格布局

    這篇文章主要為大家詳細(xì)介紹了Android開發(fā)之TableLayout表格布局,表格布局模型是以行列的形式管理子控件,對(duì)TableLayout表格布局感興趣的小伙伴們可以參考一下
    2016-03-03
  • Flutter基于Dart Unwrapping Multiple Optional小技巧

    Flutter基于Dart Unwrapping Multiple Optional小技巧

    這篇文章主要為大家介紹了Flutter Unwrapping Multiple Optional打開多個(gè)選項(xiàng)小技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論