我想从Android设备获取实际位置,我知道有些函数会返回已注册的最后位置,我想按下我的应用程序上的按钮并知道当前位置,而不是最后一个
这是我的应用
中的lil代码段if(GooglePlayServicesUtil.isGooglePlayServicesAvailable(MyActivity.this) == ConnectionResult.SUCCESS){
//get location
LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if(manager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(2000);
locationRequest.setFastestInterval(1000);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 5, locationListener);
}else{
Intent gpsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(gpsIntent);
}
}
此代码表示,在2秒和5米之后,我将在我的听众下面获得位置更新
@Override
public void onLocationChanged(Location loc) {
if(locationObtained){
return;
}
location = loc;
locationObtained = true;
progressDialog.dismiss();
}
那么,我的工作做得好吗?我正在测试应用并且没有收到位置更新
答案 0 :(得分:2)
当你从GPS获得位置时,可能需要一些时间,因为GPS模块需要找到卫星。因此,当GPS模块找到卫星时,您需要等待几分钟或几分钟。 如果WI-FI位置提供商可用,您可以更快地获得位置。
您可以在此处找到有关位置提供商的其他信息: http://developer.android.com/guide/topics/location/strategies.html
因为Android已经
GPS_PROVIDER and NETWORK_PROVIDER
您可以注册两者并同时从两个开始从onLocationChanged(位置位置)获取事件。到现在为止还挺好。现在问题是我们需要两个结果,还是我们应该采取最好的结果。据我所知,GPS_PROVIDER结果的准确度要高于NETWORK_PROVIDER。
更新:
例如,您有位置监听器:
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
//here you get locations from both providers
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
你需要做那样的事情:
LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,locationListener);
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,locationListener);
但在注册之前,您需要检查此设备上是否提供这些提供商,例如:
boolean network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
boolean gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
答案 1 :(得分:0)
如果您在建筑物内,可能很难获得GPS位置。如果您想在建筑物内部定位,请尝试将LocationManager.GPS_PROVIDER
与LocationManager.NETWORK_PROVIDER
合并。