Не вдається вирішити Manifest.permission.ACCESS_FINE_LOCATION


78

При додаванні дозволів до мого файлу маніфесту працює xml нижче.

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

Однак цей xml не працює.

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

Який із них я повинен використовувати? Якщо це перший, чому б це не спрацювало? Як я можу це виправити?

Крім того, я отримую виняток, пов’язаний із дозволами на виконання Android 6.0:

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

Коли я намагаюся додати дозвіл до масиву String, щоб перевірити дозвіл, Android Studio повідомляє мені, що він не може вирішити Manifest.permissionв наведеному нижче коді:

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

Навіщо це робити? Як я можу це виправити?

Відповіді:


221

Для першої частини ви повинні використовувати <uses-permission> відповідно до веб-сайту Android Devlopers . Спробуйте переконатися, що ви заявляєте свої дозволи безпосередньо під <manifest>тегом, а не в <application>тезі. Важко зрозуміти, в чому проблема, не побачивши весь файл маніфесту. Перегляньте посилання, яке я розмістив вище, щоб отримати докладнішу інформацію про те, як заявити дозволи у своєму маніфесті.

Стосовно вашої проблеми з дозволами на виконання:

З дозволами на використання Не вдається вирішити цю проблему.

новий рядок [] {Manifest.permission.ACCESS_FINE_LOCATION}

Чому?

Переконайтеся, що використовуєте android.Manifestзамість my.app.package.Manifest. Багато разів Android Studio встановлюватиме за замовчуванням останню замість першої.

Отже, ваш новий рядок коду буде виглядати так:

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

Редагувати: я переформатував свою відповідь.

Редагування 2: Остерігайтеся імпорту android.Manifest. Це може спричинити проблеми, якщо ви також імпортуєте my.app.package.Manifest. Крім цього, import android.Manifestє іншим дійсним способом вирішення цієї проблеми.


1
Використання andorid.Manifest.permission.X замість Manifest.permission.X вирішило це для мене, дякую.
hnilsen

Я новачок в android, тому не можу зрозуміти, куди потрібно помістити "new String [] {android.Manifest.permission.ACCESS_FINE_LOCATION};" цей рядок в андроїд-студії.
anshuman burmman

91

змінити це

Manifest.permission.ACCESS_FINE_LOCATION

в це

android.Manifest.permission.ACCESS_FINE_LOCATION


24

Спробуйте це! Оскільки ACCESS_FINE_LOCATION доступний у наступному пакеті, то додайте:

import android.Manifest;

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­


такий тип рішення є кращим як коментар, якщо ви не впевнені.
jjj

6

У мене була подібна проблема там, де використовували;

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

де це не може розпізнати символ READ_CONTACTS.

Однак при використанні;

import android.Manifest;

Це почало розпізнавати READ_CONTACT


3

якщо ви працюєте над динамічними дозволами та будь-якими дозволами, такими як ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION видає помилку "не вдається вирішити метод PERMISSION_NAME", у цьому випадку напишіть вам код з ім'ям дозволу, а потім відновіть свій проект, це відновить файл маніфесту (Manifest.permission)


1

Якщо у вас є вже uses.permissions настройки правильно в вашому файлі маніфесту, як уже згадано hnilsen, просто замініть рядок:

 Manifest.permission.ACCESS_FINE_LOCATION

цим:

 android.Manifest.permission.ACCESS_FINE_LOCATION

Це може вирішити вашу проблему.


0
 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);

        }

0

Спробуйте це перед запуском, переконайтесь, що у вас є дозвіл на доступ ..

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


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

змінити його на

android.manifest.permission.ACCESS_FINE_LOCATION

Привіт, Ягріт Вішваркарма, ти маєш на увазі, що слід видалити new String[]{частину?
Панг

-2

Спробуйте це:

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;
    }

-2

Коли ви вводите "Маніфест", Android Studio має запропонувати вам вибрати кілька варіантів Маніфесту. Вам слід вибрати один стартовий андроїд замість імені вашого проекту.

Якщо ви отримуєте доступ до посилання на Manifest.java і ви можете виявити, що в класі "Дозвіл" є лише 1-2 рядки, тоді ви посилаєтесь на неправильний клас маніфесту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.