LocationManager.getLastKnownLocation (LocationManager.NETWORK_PROVIDER) всегда возвращает NULL на Galaxy S7 (ТОЛЬКО)
Только что получил Galaxy S7 (Edge) под управлением Marshmallow (6.0.1) и обнаружил, что у него есть проблема с моим приложением, которое используетandroid.permission.ACCESS_COARSE_LOCATION
и цели Sdk Version 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).
Обратите внимание, что если я изменю манифест на использование 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
}
});
Так что на данный момент, я чувствую, что это проблема исключительно для нового Samsung Galaxy S7.