У меня есть приложение для Android, и мы недавно перешли на уровень API 26 с 22.
Я проверял, есть ли у приложения одно из разрешений ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION.
Одна проблема, которую я нашел и не смог решить, это то, что она дает исключение
"java.lang.SecurityException:« пассивный »поставщик местоположения требует разрешения ACCESS_FINE_LOCATION»
Мой файл манифеста Android имеет:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Также я получил такое исключение:
Process: edu.syr.ischool.orange.indoormap3, PID: 12666
java.lang.SecurityException: "passive" location provider requires ACCESS_FINE_LOCATION permission.
at android.os.Parcel.readException(Parcel.java:2005)
at android.os.Parcel.readException(Parcel.java:1951)
at android.location.ILocationManager$Stub$Proxy.getLastLocation(ILocationManager.java:802)
at android.location.LocationManager.getLastKnownLocation(LocationManager.java:1220)
at utils.CheckinUtils.checkLocation(CheckinUtils.java:100)
at utils.CheckinUtils.resume(CheckinUtils.java:247)
Также мой checkinUtil -> Метод checkLocation
if (ActivityCompat.checkSelfPermission(activity, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(activity, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
locationManager = (LocationManager) activity.getSystemService(serviceString);
Location lastKnow = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
Я проверил разрешение одного из них, как описано в https://developer.android.com/reference/android/location/LocationManager#getLastKnownLocation(java.lang.String)
Тем не менее, он дает исключение для ACCESS_FINE_LOCATION, но, поскольку он проходит условие if и выдает исключение безопасности, он должен иметь разрешение ACCESS_COARSE_LOCATION. Тогда почему происходит сбой приложения?