【发布时间】:2013-10-07 14:50:15
【问题描述】:
我尝试在实现 LocationListener 的 FragmentActivity(为了用户 SupportMapFragment)中使用 LocationListener 获取用户的当前位置。
这是我的代码:
private void setLocationManager() {
if (lm == null)
lm = (LocationManager) this
.getSystemService(Context.LOCATION_SERVICE);
// exceptions will be thrown if provider is not permitted.
try {
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
}
try {
network_enabled = lm
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
}
if (gps_enabled) {
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
Toast.makeText(HomeActivity.this, "Refresh GPS", Toast.LENGTH_SHORT)
.show();
} else {
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
this);
Toast.makeText(HomeActivity.this, "Refresh NET", Toast.LENGTH_SHORT)
.show();
}
}
@Override
public void onLocationChanged(Location location) {
MyCurrentLocation = location;
Toast.makeText(
HomeActivity.this,
"Refresh == my lat : " + MyCurrentLocation.getLatitude()
+ " my long : " + MyCurrentLocation.getLongitude(),
Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(HomeActivity.this, provider, Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderEnabled(String provider) {
Toast.makeText(HomeActivity.this, provider, Toast.LENGTH_SHORT).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
我遇到的问题是:
- 被覆盖的方法:onLocationChanged 永远不会使用网络提供商调用
- 被覆盖的方法:onProviderDisabled 永远不会每次都被调用..
我从不使用:lm.removeUpdate 方法
【问题讨论】:
-
您是否考虑过 Play 服务中的新功能。您可以从中检索当前位置。 developer.android.com/training/location/retrieve-current.html
-
网络提供者不调用 onLocationChanged 是一个已知问题,在发布融合提供者时出现。检查code.google.com/p/android/issues/detail?id=57707 和code.google.com/p/android/issues/detail?id=55896。有趣的是,地图应用程序(可能使用融合的提供者)从网络提供者那里获得更新就好了。我强烈建议现在使用融合位置提供程序。
-
+1 波罗罗!重新启动在我的三星 Galaxy S3 上成功了,Android 很无聊..
标签: android google-maps-android-api-2 locationlistener