我遇到了一个奇怪的问题,现在花了很多时间试图解决这个问题。对于我在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更改为基于标准的搜索提供程序,但它仍然无法正常工作。任何人吗?
答案 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条件。这是注册您的监听器并使您获得位置更新的原因。确保在两种方法中注册更新,或者只是提取它以便在不考虑满足哪种条件的情况下调用它