Appena ricevuto un Galaxy S7 (Edge) con Marshmallow (6.0.1) e rileva che ha un problema con la mia app che utilizza android.permission.ACCESS_COARSE_LOCATION
e obiettivi Sdk Version 22 (Lollipop). Quando chiamo locationManager.getLastKnownLocation()
restituisce sempre NULL. Ecco quello che sto correndo:LocationManager.getLastKnownLocation (LocationManager.NETWORK_PROVIDER) restituisce sempre NULL su Galaxy S7 (SOLO)
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;
}
Questo stesso codice funziona bene su ogni altro dispositivo che ho provato: Galaxy S5 (5.0.1), Nexus 7 (5.0.1), Nexus 9 (6.0.1), e Samsung Tab3 (4.4.2)
Si noti che se cambio il manifesto di utilizzare ACCESS_FINE_LOCATION, il codice precedente funziona bene su tutti i dispositivi. Sfortunatamente, la gestione non mi permetterà di cambiare i permessi in questo momento.
In alcune risposte che ho visto qui su SO, si consiglia di richiamare quanto segue prima di fare getLastKnownLocation(), ma ciò non ha avuto alcun effetto.
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
}
});
Quindi al momento, ritengo che questo sia un problema esclusivo del nuovo Samsung Galaxy S7.
Hai provato a richiedere le autorizzazioni a livello di codice da quando Marshmallow ha introdotto il modello di autorizzazione Runtime? –
Il mio target per le app è 22 (Lollipop). minSdkVersion 19 targetSdkVersion 22 – GaryAmundson
È necessario richiedere specificamente le autorizzazioni per Android Marshmallow e versioni successive. Controlla questo post della mia - http://stackoverflow.com/questions/35856432/asking-for-permissions-while-using-locationmanager/35857017#35857017 –