Android LocationListener.onLocationChanged永远不会被调用

时间:2012-02-16 20:07:56

标签: android

我遇到了一个奇怪的问题,现在花了很多时间试图解决这个问题。对于我在Android Market中的NFC Checkin应用程序,我正在访问用户的位置以进行Foursquare搜索。

所以,这里大概是我做的(类似的代码之前已经有效 - 但现在我正在使用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更改为基于标准的搜索提供程序,但它仍然无法正常工作。任何人吗?

2 个答案:

答案 0 :(得分: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");
    }    
}

答案 1 :(得分:0)

如果您每次不调用requestLocationUpdates时都遇到第一个if条件。这是注册您的监听器并使您获得位置更新的原因。确保在两种方法中注册更新,或者只是提取它以便在不考虑满足哪种条件的情况下调用它