Невозможно разрешить checkSelfPermission () или requestPermissions () - PullRequest
0 голосов
/ 23 октября 2019

Это, вероятно, очень тупой вопрос.

У меня есть приложение, написанное с использованием Eclipse несколько лет назад для Android OS 8 (2.3.x). Я пытаюсь перенести его в современный мир (все еще построенный с 8, но нацеленный на 28), и перенес его в Android Studio. Я не касался кода Android в течение нескольких лет, действительно очень мало знаю об Android Studio и еще меньше о Gradle.

В настоящее время я пытаюсь разобраться с другой средой разрешений, то есть проверять запуск и запрашиватьесли необходимо. У меня есть следующий код в основном упражнении (расширенный от Activity) - я знаю, что это просто и может быть связано с другой логикой, я просто сейчас пытаюсь запустить его в принципе:

...
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
...
    onCreate(...) {
    ...
    if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
        ActivityCompat.requestPermissions(
                this,
                new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                ID_ACCESS_FINE_LOCATION);
    ...

android-support-v4.jar находится в / libs в проекте.

Сборка не может разрешить checkSelfPermission () или requestPermissions (), несмотря на импорт.

Я нашел другие вопросы по этомуи один (сам) ответ был «AS импортировал supportlib как jar, и этот jar был примерно с 2014 года. Я просто заменил jarimport реальной зависимостью, и теперь он работает».

Это звучит немного похоже на меня, но, к сожалению, из-за моего ограниченного знания среды сборки, я не совсем понимаю ответ, и я беспокоюсь о том, чтобы напортачить что-то большое по ошибке. Я был бы очень признателен, если бы кто-то мог объяснить в словах одного слога, что мне действительно нужно сделать, чтобы решить эту проблему, или, по крайней мере, указать мне, где это объясняется ....

Спасибо.

POSTSCRIPT

build.gradle согласно запросу в комментарии (кроме изменения целевого SDK, он был создан автоматически при импорте из дерева Eclipse):

apply plugin: 'com.android.application'

android {
    compileSdkVersion 8
    buildToolsVersion "29.0.2"

    defaultConfig {
        applicationId "uk.co.nightshadearts.gpscompass"
        minSdkVersion 8
        targetSdkVersion 28
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile project(':googleplayservices_lib')
    compile files('libs/android-support-v4.jar')
}

1 Ответ

0 голосов
/ 23 октября 2019

android-support-v4.jar является очень старой и очень устаревшей библиотекой. Вам следует ознакомиться с новой системой сборки на базе Gradle . Чтобы использовать последнюю версию ContextCompat и ActivityCompat, выполните следующие действия:

  • Удалите android-support-v4.jar из libs/
  • Откройте файл build.gradle вашего модуля (вложенныйодин, а не тот, что находится в корне вашего проекта)
  • Добавьте implementation "androidx.core:core:1.1.0" (последний стабильный на момент написания) или implementation "androidx.core:core:1.2.0-beta01" (последний выпуск на момент написания) к вашему dependencies блоку:
...
dependencies {
    ...
    implementation "androidx.core:core:1.1.0"
}

(взято из здесь )

  • Синхронизировать проект, вы должны получить запрос на синхронизацию при изменении build.gradle содержимого файла
  • Reimport androidx.core.content.ContextCompat и androidx.core.app.ActivityCompat
...