我遇到了一个奇怪的问题,现在花了很多时间试图解决这个问题。对于 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);
}
该 Activity 实现了 LocationListener 接口(interface),因此这里是 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 更改为基于条件的提供商搜索,但它仍然无法工作。有人吗?
最佳答案
@Override
可能是一个问题,因为 LocationListener
现在是一个接口(interface)。尝试使用
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");
}
}
关于Android LocationListener.onLocationChanged 永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9318319/