2016-02-12 6 views
1

В моем приложении хочу издеваться над моим местоположением в данном месте. На данный момент он вызывает обоих провайдеров и подталкивает местоположение к тому месту, которое я ему дал. Он вызывает его как только секды, как вы видите в функции запуска. В чем разница между провайдером сети и поставщиком Gps? что я должен использовать? На данный момент я использую их оба, и это мой код:Провайдер сети против провайдера Gps для определения местоположения android

public boolean   

    startMockLocation(com.quinny898.library.persistentsearch.Location location) { 


    if (location != null && location.getLng() == -1000 && location.getLat() == -1000) { 
     try { 
      PlaceAPI placeApi = new PlaceAPI(); 
      placeApi.getLatLng(location); 
     } catch (Exception e) { 

     } 
    } 
    if (location != null) 
     if (location.getLng() != -1000 && location.getLat() != -1000) { 
      this.currentLocation = location; 
      try { 
       if(!hasProvider) { 
        LocationManager lm = (LocationManager) mContext.getSystemService(
          Context.LOCATION_SERVICE); 
        // Toast.makeText(mContext, "Lidt: " + lm.getAllProviders(), Toast.LENGTH_SHORT).show(); 
        lm.addTestProvider(LocationManager.NETWORK_PROVIDER, false, false, false, false, false, 
          true, true, android.location.Criteria.POWER_LOW, android.location.Criteria.ACCURACY_FINE); 
        lm.setTestProviderEnabled(LocationManager.NETWORK_PROVIDER, true); 

        LocationManager lm2 = (LocationManager) mContext.getSystemService(
          Context.LOCATION_SERVICE); 
        lm2.addTestProvider(LocationManager.GPS_PROVIDER, false, false, false, false, false, 
          true, true, android.location.Criteria.POWER_LOW, android.location.Criteria.ACCURACY_FINE); 
        lm2.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true); 
        this.hasProvider = true; 
       } 
       isWorking = setMockLocation(location); 
       setMockLocation2(location); 
      }catch (Exception e) 
      { 
       isWorking = false; 
      } 
      return isWorking; 
     } 

    return false; 
} 

public void run() { 
    Thread thread = new Thread() { 
     @Override 
     public void run() { 

       while (true) { 
        try { 
         if (isWorking) { 
          if (currentLocation != null) { 
           setMockLocation(currentLocation); 
           setMockLocation2(currentLocation); 
          } 
         } 
         sleep(1000); 
        } catch (InterruptedException e) { 
         // e.printStackTrace(); 
         Toast.makeText(mContext, e.toString(), Toast.LENGTH_LONG).show(); 
        } 
       } 
     } 
    }; 

    thread.start(); 
} 

/* 
    Stop the spoofed location and return to the source location 
*/ 
public void stopMockLocation() { 
    if (isWorking) { 


     LocationManager lm = (LocationManager) mContext.getSystemService(
       Context.LOCATION_SERVICE); 
     lm.removeTestProvider(LocationManager.NETWORK_PROVIDER); 
     lm.removeTestProvider(LocationManager.GPS_PROVIDER); 
     currentLocation = null; 
     this.isWorking = false; 
    } 
} 

private boolean setMockLocation(com.quinny898.library.persistentsearch.Location location) { 
    try 
    { 
    LocationManager lm = (LocationManager) 
      mContext.getSystemService(Context.LOCATION_SERVICE); 

    android.location.Location newLocation = new android.location.Location(LocationManager.NETWORK_PROVIDER); 

    newLocation.setLatitude(location.getLat()); 
    newLocation.setLongitude(location.getLng()); 
    newLocation.setAccuracy(500); 
    newLocation.setTime(System.currentTimeMillis()); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos()); 
    } 
    lm.setTestProviderLocation(LocationManager.NETWORK_PROVIDER, newLocation); 
    } catch (Exception e) { 
     hasProvider = false; 
     return false; 
    } 
    return true; 
} 

private boolean setMockLocation2(com.quinny898.library.persistentsearch.Location location) { 
    try { 
     LocationManager lm = (LocationManager) 
       mContext.getSystemService(Context.LOCATION_SERVICE); 

     android.location.Location newLocation = new android.location.Location(LocationManager.GPS_PROVIDER); 

     newLocation.setLatitude(location.getLat()); 
     newLocation.setLongitude(location.getLng()); 
     newLocation.setAccuracy(500); 
     newLocation.setTime(System.currentTimeMillis()); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
      newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos()); 
     } // todo 
     lm.setTestProviderLocation(LocationManager.GPS_PROVIDER, newLocation); 
    } catch (Exception e) { 
     hasProvider = false; 
     return false; 
    } 

    return true; 
} 

Можно ли назвать их обоими?

+0

Используйте новое fuesed location api в сервисе Google play. Он удалит все препятствия менеджера местоположений. – androidnoobdev

ответ

0

Поставщик сети означает, что эта позиция основана на доступности опорных точек и точек доступа Wi-Fi. Позиция от провайдера GPS основана на спутниках, эта имеет в основном лучшую точность. Практически все приложения уделяют больше внимания позициям, получаемым провайдером GPS.