我无法理解整个获取用户位置。我按照了LocationManager的教程。它从GPS提供商处获得最后的已知位置。据我所知,一些用户没有最后知道的位置,它返回NULL。
我假设下面的代码如果NULL将使用GPS并尝试获取用户位置。但事实并非如此。如何强制android检索用户位置?而且不只是显示我的NULL消息而不起作用?
setContentView(R.layout.beer_location_list);
String title = "Nearby Breweries";
TextView topTitle = (TextView) findViewById(R.id.beerLocationTitle);
topTitle.setText(title);
//get user location
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(location != null)
{
double longitude = location.getLongitude();
double latitude = location.getLatitude();
//construct url
String url = "myURl";
Log.d("urlTest",url);
//async task goes here
new GetNearbyBreweries(this).execute(url);
}
else{
//pop toast saying cant get location
Toast.makeText(getApplicationContext(), "Can not get your location at this time", Toast.LENGTH_LONG).show();
}
更新
在查看了一些回复之后,为什么我不能做这样的事情来在每次打开此活动时获取用户位置:
final LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setAltitudeRequired(false);
criteria.setSpeedRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
LocationListener listener = new LocationListener();
manager.requestSingleUpdate(criteria, listener, null);
我用
覆盖位置监听器@Override
public void onLocationChanged(Location lastKnownLocation) {
if (lastKnownLocation != null) {
// whatever needs to be done
}
}
但是我收到了错误:LocationListener是抽象的,无法在新的LocationListener();
行上实例化答案 0 :(得分:2)
通过注册LocationListener
并使用requestSingleUpdate
请求使用当前位置进行更新,为您的位置申请单一更新。我假设您的应用清单中列出了正确的权限。请注意,您可能不会收到更新,特别是因为较新的Android版本允许用户禁止对应用进行位置访问。
LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setAltitudeRequired(false);
criteria.setSpeedRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
LocationListener listener = new LocationListener() {
@Override
public void onLocationChanged(Location lastKnownLocation) {
if (lastKnownLocation != null) {
// whatever needs to be done
}
}
manager.requestSingleUpdate(criteria, listener, null);
答案 1 :(得分:2)
关于问题的最后更新,它是一个抽象类,因此无法实例化。您需要找到实现它的具体类或自己实现它。
查看有关如何使用location API的完整示例 http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/ http://www.vogella.com/articles/AndroidLocationAPI/article.html
您需要让您的活动实现LocationListener类,并且您可以覆盖函数而无需创建新对象。
public class myActivity extends Activity implements LocationListener
答案 2 :(得分:1)
getLastKnownLocation
仅检索该历史信息(如果存在) - 它不会启动位置提供程序以获取锁定。
如果getLastKnownLocation
返回null
,您应该使用requestLocationUpdates
方法获取用户的当前位置。
另外,请注意,如果最近没有获取位置锁定,getLastKnownLocation
返回的位置可能会非常旧,因此您可能需要检查时间戳并假设它的年龄超过a时已过时一定的门槛。