2012-02-16 112 views
2

我有一个奇怪的问题,花了很多分钟,现在试图找出这一点。对于Android Market中的我的NFC Checkin应用程序,我正在访问用户的位置以进行Foursquare搜索。Android LocationListener.onLocationChanged从来没有叫

所以,这里的大概我做什么(类似的代码已经工作过 - 对AA的Galaxy Nexus,但现在我仍然在Android 4.0.2):

  Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_MEDIUM); 

     String providerName = locationManager.getBestProvider(criteria, true); 


     Location loc = locationManager.getLastKnownLocation(providerName); 

     showSearchUI(); 
     if (loc.getTime() > (new Date().getTime() - 1000*2*60)) //2Minutes back 
     { 
      Log.d("demo", "LastKnownLocation is good enough, using this location!"); 
      startVenueSearch(loc); 
     } 
     else 
     { 
      Log.d("demo", "Requesting network location updates..."); 
      locationManager.requestLocationUpdates(providerName, 0, 0, this); 
     } 

活动实现了LocationListener的接口,所以这里是onLocationChanged方法:

@Override 
public void onLocationChanged(Location location) { 
    locationManager.removeUpdates(this); 
    Log.d("demo", "Got fresh location, beginning... " + location.getLatitude() + "/" + location.getLongitude()); 
    //fake hybris 
    //location.setLatitude(48.150098d); 
    //location.setLongitude(11.546026d); 

    startVenueSearch(location); 

} 

问题:我只是得不到位置更新。我只是绕过代码,将代码从直接调用NetworkProvider改为基于标准的搜索提供程序,但它仍然不起作用。任何人?

+0

您是否找到解决方案? – 4gus71n 2013-11-22 13:36:29

回答

0

如果您每次不会调用requestLocationUpdates时都碰到第一个if条件。这是注册您的监听器并导致您获取位置更新的内容。确保为这两种方法的更新注册或只是提取它,所以它被调用无论哪个条件满足

2

@Override可能是一个问题,因为LocationListener现在是一个接口。尝试使用

public class MyLocationListener implements LocationListener{ 
    public void onLocationChanged(Location location) { 
     Toast("onLocationChanged"); 
    } 

    public void onProviderDisabled(String provider) { 
     Toast("onProviderDisabled"); 
    } 

    public void onProviderEnabled(String provider) { 
     Toast("onProviderEnabled");   
    } 

    public void onStatusChanged(String provider, int status, Bundle extras) { 
     Toast("onStatusChanged"); 
    }  
}