2016-09-12 71 views
0

我想測試我的應用程序,它使用GPS位置更新。當我無法獲取任何GPS信號時,我試圖通過嘲弄設備的位置使其在室內工作。我按照教程here,但我的應用程序運行時,它仍然沒有收到任何位置更新。在Android設備上嘲弄的位置

任何人都可以發現我的代碼有什麼問題嗎?

 MockLocationProvider mock = new MockLocationProvider(LocationManager.GPS_PROVIDER, this); 
     mock.pushLocation(-12.34, 23.45); 

     LocationManager locMgr; 

     locMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    } 

    @Override 
    public void onLocationChanged(Location Loc) { 
     double lat = Loc.getLatitude(); 
     double lon = Loc.getLongitude(); 
     String l = "Longitude: " + lon + " Latitude: " + lat; 
     Toast.makeText(getApplicationContext(), l ,Toast.LENGTH_SHORT).show(); 
    } 


public class MockLocationProvider { 
     String providerName; 
     Context ctx; 

     public MockLocationProvider(String name, Context ctx) { 
      this.providerName = name; 
      this.ctx = ctx; 

      LocationManager lm = (LocationManager) ctx.getSystemService(
        Context.LOCATION_SERVICE); 
      lm.addTestProvider(providerName, false, false, false, false, false, 
        true, true, 0, 5); 
      lm.setTestProviderEnabled(providerName, true); 
     } 

     public void pushLocation(double lat, double lon) { 
      LocationManager lm = (LocationManager) ctx.getSystemService(
        Context.LOCATION_SERVICE); 

      Location mockLocation = new Location(providerName); 
      mockLocation.setLatitude(lat); 
      mockLocation.setLongitude(lon); 
      mockLocation.setAltitude(0); 
      mockLocation.setTime(System.currentTimeMillis()); 
      mockLocation.setElapsedRealtimeNanos(System.currentTimeMillis()); 
      mockLocation.setAccuracy(2); 
      lm.setTestProviderLocation(providerName, mockLocation); 
     } 

回答

0

當您的代碼偵聽位置更新時,您應該同時模擬位置。

在你的情況下,只要你調用pushLocation方法,那麼onLocationChanged方法將被觸發。

監聽GPS

@Override 
public void onLocationChanged(Location Loc) { 
    double lat = Loc.getLatitude(); 
    double lon = Loc.getLongitude(); 
    String l = "Longitude: " + lon + " Latitude: " + lat; 
    Toast.makeText(getApplicationContext(), l ,Toast.LENGTH_SHORT).show(); 
} 

模擬它

Handler mHandler = new Handler(); 
public void loopMock(){ 
    mHandler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      // onLocationChanged method will be fired 
      mock.pushLocation(-12.34, 23.45); 
      mHandler.postDelayed(this, 1000); 
     } 
    }, 1000); 
}