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.

Ответы на вопрос(2)

Ваш ответ на вопрос