Ошибка разрешения ложного положительного пуха даже после запроса разрешения во время выполнения
Я испытываю трудности с пониманием подхода разрешения времени выполнения, используемого Android. Для тех, кто читает это, я не спрашиваю здесь "как вызвать разрешение во время выполнения" .. Я могу показать диалоговое окно разрешения, если оно еще не было предоставлено, и даже получить его результат в onRequestPermissionsResult () во фрагменте.
с этим кодом
if (ContextCompat.checkSelfPermission(mActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
FragmentCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, RQ_GET_LOCATION);
Log.e("permission", "asking permission");
return;
}
Log.e("permission", "permission already granted");
accessLocation();
Получение результата вonRequestPermissionsResult
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case RQ_GET_LOCATION:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.e("permission", "onRequestPermissionsResult : permission granted, access location here");
accessLocation();
}
else {
Log.e("permission", "onRequestPermissionsResult : permission denied");
}
break;
}
}
код внутриaccessLocation()
является
private void accessLocation()
{
Log.e("permission", "accessing location permission");
Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (mLastLocation != null) {
userDetail.setLat(String.valueOf(mLastLocation.getLatitude()));
userDetail.setLat(String.valueOf(mLastLocation.getLongitude()));
}
else {
if (!isLocationEnabled()) {
mShowAlert();
}
}
}
Все идет нормально.. но меня беспокоит то, что внутри моегоaccessLocation()
метод я получаю ложноположительную ошибку на линии
Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
это говорит
Для вызова требуется разрешение, которое может быть отклонено пользователем: код должен явно проверять наличие разрешения (с помощьюcheckPermission
) или явно обрабатывать потенциалSecurityException
Я знаю, что это происходит, когда вы не проверяете разрешение. Эта ошибка возникает, как только я аннотирую метод@SuppressWarnings("MissingPermission")
я не знаю, как разработчики на самом деле обрабатывают такие ошибки, когда им приходится вызывать метод несколько раз в своем классе. либо я должен использовать@SuppressWarnings("MissingPermission")
или же ? (я не знаю)
Предположим, я запрашиваю разрешение, как я делаю в первом блоке кода выше> всплывающее диалоговое окно разрешений> пользователь предоставляет разрешение> поток переходит кonRequestPermissionsResult
и снова я пишу код для доступа к местоположению, но это также покажет мне ложно-положительную ошибку за отсутствие проверки разрешения ..
или я делаю что-то ужасное, или я думаю, что я неправильно понял модель разрешений, или есть какая-то ошибка с lint (я ДЕЙСТВИТЕЛЬНО не думаю, что это проблема) ..
Я уже посмотрел вэтот вопрос а такжеэта студийная ошибка но я не удовлетворен ответами там.
ПОЖАЛУЙСТА, СКАЖИ МНЕ, ЧТО Я ДЕЛАЮ НЕПРАВИЛЬНО