Не удается разрешить Манифест.разрешение.ДОСТУП К ПРЕКРАСНОМУ МЕСТОПОЛОЖЕНИЮ


при добавлении разрешений в мой файл манифеста, ниже xml работает.

 <permission android:name="android.permission.ACCESS_FINE_LOCATION" />

однако этот xml не работает.

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

какой из них я должен использовать? Если это первый, почему бы ему не работать? Как я могу это исправить?

кроме того, я получаю Android 6.0 runtime permissions related exception:

java.lang.SecurityException: "gps" location provider requires ACCESS_FINE_LOCATION permission.

когда я пытаюсь добавить разрешение в массив строк, чтобы проверить разрешение, Android Studio говорит мне, что он не может решите Manifest.permission в приведенном ниже коде:

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

зачем ему это делать? Как я могу это исправить?

12 64

12 ответов:

для первой части, вы должны использовать <uses-permission>согласно сайту Android Devlopers. Попробуйте убедиться, что вы объявляете свои разрешения напрямую под <manifest> тег, а не в <application> - тег. Трудно понять, в чем ваша проблема, не видя всего файла манифеста. Проверьте ссылку, которую я разместил выше для получения дополнительной информации о том, как назначить разрешения в манифесте.

в отношении ваших разрешений во время выполнения проблема:

С использованием-разрешения не могут решить эту проблему..

новая строка[]{Манифест.разрешение.Функция}

почему?

убедитесь, что вы используете android.Manifest вместо my.app.package.Manifest. Много раз Android Studio будет по умолчанию для последнего вместо первого.

Итак, ваша новая строка кода будет выглядеть так:

new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION};

Edit: я переформатировал свой ответ.

Edit 2: Be остерегайтесь импорта android.Manifest. Это можете вызывает проблемы, если вы также импортируете my.app.package.Manifest. Кроме этого import android.Manifest является еще одним допустимым способом решения этой проблемы.

изменить это

Manifest.permission.ACCESS_FINE_LOCATION

в этой

android.Manifest.permission.ACCESS_FINE_LOCATION

попробуйте это! Поскольку ACCESS_FINE_LOCATION доступен в следующем пакете, поэтому добавьте:

import android.Manifest;

у меня была аналогичная проблема, где используется;

ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED 

, где он не может разрешить символ READ_CONTACTS.

однако при использовании;

import android.Manifest;

Он начал признать READ_CONTACT

Если вы работаете над динамическими разрешениями и любыми разрешениями, такими как ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION дает ошибку "не удается разрешить метод PERMISSION_NAME" в этом случае напишите вам код с именем разрешения, а затем перестроить проект это восстановить манифест(Манифест.разрешение) файл

 if (Build.VERSION.SDK_INT >= 23) {

            if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                    || checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

                mapView.setMyLocationEnabled(true); 
            }
        }
        else
        {
            mapView.setMyLocationEnabled(true);

        }

попробуйте перед запуском, убедитесь, что у вас есть разрешение на доступ..

try {
    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
} catch (SecurityException e) {
   dialogGPS(this.getContext()); // lets the user know there is a problem with the gps
}

изменить

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

этой

new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}

ваша проблема будет решена.

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

изменить на

android.manifest.permission.ACCESS_FINE_LOCATION

Если у вас есть уже использует.разрешения правильно настроить в файле манифеста, как уже упоминалось hnilsen, просто замените строку:

 Manifest.permission.ACCESS_FINE_LOCATION

на этот:

 android.Manifest.permission.ACCESS_FINE_LOCATION

Это может решить вашу проблему.

попробуйте это:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_SELECT_PICTURE);
        return;
    }

когда вы набираете "Манифест", Android Studio должна предложить вам выбрать несколько вариантов Манифеста. Вы должны выбрать один запуск android вместо имени вашего проекта.

Если вы получаете доступ к ссылке Манифеста.java, и вы можете найти, что есть только 1-2 строки в классе "разрешение", тогда вы ссылаетесь на неправильный класс манифеста.