剛剛收到運行Marshmallow(6.0.1)的Galaxy S7(Edge),並發現它與使用android.permission.ACCESS_COARSE_LOCATION
和目標的應用程序有關Sdk版本22(棒棒糖)。當我呼叫locationManager.getLastKnownLocation()
時,它總是返回NULL。下面是我運行:LocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)總是在Galaxy S7上返回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;
}
此相同的代碼工作我已經試過所有其他設備上的罰款:銀河S5(5.0.1)的Nexus 7(5.0.1版),Nexus 9(6.0.1 )和Samsung Tab3(4.4.2)
請注意,如果我更改清單以使用ACCESS_FINE_LOCATION,上面的代碼在每個設備上都能正常工作。不幸的是,管理層目前不允許我更改權限。
在我看到的一些答案中,建議在執行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的問題。
您是否以編程方式嘗試請求權限,因爲Marshmallow引入了運行時權限模型? –
我的應用程序目標是22(棒棒糖)。 minSdkVersion 19 targetSdkVersion 22 – GaryAmundson
您必須專門請求Android棉花糖及以上權限。檢查我的這篇文章 - http://stackoverflow.com/questions/35856432/asking-for-permissions-while-using-locationmanager/35857017#35857017 –