我使用三星手机通过 LocationManager API 获取位置,如果禁用 GPS,我无法获取位置,通过网络提供商我无法获取位置。
这是代码,这在 HTC 和索尼甚至禁用 GPS 中都可以正常工作,但在三星手机中则不行。
public Location getLocation() {
try {
mLocationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = mLocationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = mLocationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER); //fails in samsung phone returns NULL
if (isGPSEnabled == false && isNetworkEnabled == false) {
// no network provider is enabled
} else {
this.canGetLocation = true;
if (isNetworkEnabled) {
mLocationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (mLocationManager != null) {
mLocation = mLocationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
}
// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled) {
if (mLocation == null) {
mLocationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (mLocationManager != null) {
mLocation = mLocationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return mLocation;
}
此行为是三星手机独有的。 HTC 你不会遇到这个问题。
您必须启动 locationManager,因为默认情况下它会查找谷歌地图缓存,并且不关心该缓存对于当前位置信息的陈旧程度。执行此操作,启动您的应用程序,形成不同的 GPS 位置,并注意它仍然显示旧位置。现在启动谷歌地图,然后重新启动您的应用程序,您的位置将会改变。要以编程方式启动“当前位置”的应用程序,请在调用之前运行以下代码getLastKnownLocation
YOUR_APPLICATION_CONTEXT.getLocationManager().requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(final Location location) {
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)