刚收到运行棉花糖(6.0.1)的Galaxy S7(Edge),发现我的应用程序存在问题,该问题使用android.permission.ACCESS_COARSE_LOCATION
并针对Sdk版本22(Lollipop)。当我调用locationManager.getLastKnownLocation()
时,它总是返回NULL。这是我正在运行的:
public Location getLastKnownLocationObject(Context context) {
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
try {
if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
// Location is always null on S7 (only)
Log.i(TAG, ">>> getLastKnownLocationObject() getLastKnownLocation: " + location);
return location;
}
} catch (Exception e) {
Log.e(TAG, ">>> getLastKnownLocationObject() exception", e);
}
return null;
}
相同的代码在我尝试过的所有其他设备上都可以正常运行:Galaxy S5(5.0.1),Nexus 7(5.0.1),Nexus 9(6.0.1)和Samsung Tab3(4.4.2)
请注意,如果我将 list 更改为使用ACCESS_FINE_LOCATION,则以上代码可在所有设备上正常运行。不幸的是,管理层目前不允许我更改权限。
在我在SO上看到的一些答案中,建议在执行getLastKnownLocation()之前先调用以下命令,但这没有任何效果。
locationManager.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) {
// NEVER CALLED on Samsung S7 for LocationManager.NETWORK_PROVIDER
}
});
因此,目前,我认为这是新的三星Galaxy S7独有的问题。
最佳答案
根据我在三星设备上的经验。如果重新启动电话,但您未启用GPS,则不会获得位置信息。如果您启用了GPS(例如通过运行Google Maps),那么您将获得一个位置。三星不会为GPS,网络或无源提供商返回位置,除非在设备加电周期中找到了位置。
我在代码中进行的任何调用都无法使其启动并激活并获得位置。他们可以在其他设备上正常工作。三星似乎也不会很长时间地缓存此信息。
关于android - LocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)在Galaxy S7上始终返回NULL(仅),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36018740/