Intereting Posts
Android: сообщение Http с параметрами не работает WebView shouldOverrideUrlLoading () не вызывается для недопустимых ссылок Изменение цвета панели действий в android Android получает фрагмент, который находится в FragmentPagerAdapter Проблема установки драйвера USB для Android на Galaxy SII Как я могу выровнять меню / значки панели инструментов Android слева, как в приложении «Карты Google»? Attr / colorError не найдена ошибка при использовании com.android.support:recyclerview-v7:26.0.0-beta2 Размер изображения Android ImageView не масштабируется с исходным изображением Почему setImageBitmap не влияет на пользовательский ImageButton? Ящик для навигации с крутильным краем в android Android – как найти несколько просмотров с общим атрибутом Как создать круговой (бесконечный) RecyclerView? Рисование квадратного макета внутри круга YouTubeAndroidPlayerAPI не может воспроизводить некоторые видеоролики Android: Как установить уровень масштабирования вида карты в радиусе 1 км вокруг моего текущего местоположения?

Диалоговое окно разрешения Android M не отображается

В настоящее время я пытаюсь адаптировать мое приложение к новой модели разрешений Android M.

Я собираю все необходимые разрешения, затем запускаю

Log.i("Permissions", "Requesting permissions: " + permissions); requestPermissions(requiredPermissions.toArray(new String[requiredPermissions.size()]), requestCodeForPermissions); 

RequiredPermissions содержит разрешения, необходимые мне как android.permission.WRITE_EXTERNAL_STORAGE .

Эта процедура определенно выполняется, так как у меня есть строка журнала в logcat:

 08-07 12:52:46.469: I/Permissions(1674): Requesting permissions: android.permission.RECEIVE_BOOT_COMPLETED; android.permission.WRITE_EXTERNAL_STORAGE 

Но диалог разрешений никогда не отображается, не говоря уже о вызове onRequestPermissionsResult ().

Что я делаю не так? Основываясь на некоторых учебниках, я обнаружил, что ничего не пропал. У меня есть только эмулятор для тестирования, нет физического устройства. Это экран экрана из настроек: Изображение

Возможно, стоит упомянуть что-то еще: если я попытаюсь открыть обзор установленных приложений с главного экрана, я выйду только из launcher3 has exited . Я не уверен, что это может быть связано.

У кого-нибудь есть идея, почему он не показывает?

Solutions Collecting From Web of "Диалоговое окно разрешения Android M не отображается"

Я испытал ту же проблему, но позже понял, что забыл добавить разрешение на файл манифеста. После добавления тега uses-permission система отобразила диалог. Может быть, помогает кому-то.

У меня возникла такая же проблема, потому что я использовал отрицательное значение как REQUEST_CODE.

 requestPermissions(new String[]{android.Manifest.permission.CAMERA}, -1) 

После использования положительного значения система показала диалог. Надеюсь, это поможет кому-то.

Добавить

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

В AndroidManifest.xml

Примечание. Разрешение, которое вы хотите получить. Например: android.permission.ACCESS_FINE_LOCATION и т. Д.

У меня была такая же проблема. Моя проблема заключалась в том, что я написал разрешение в неправильном месте манифеста. Убедитесь, что разрешения на использование находятся вне приложения:

  <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.android.gms.samples.vision.face.photo" android:installLocation="auto" android:versionCode="1" android:versionName="1" > <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <application android:hardwareAccelerated="true" android:label="FacePhotoDemo" android:allowBackup="true" android:icon="@drawable/icon"> 

У меня такая же проблема, и проблема решена после добавления shouldShowRequestPermissionRationale следующим образом:

 if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)) { } else { ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS); } 

На основании комментария от Hilal (большое спасибо!): В моем случае мое приложение действительно использует tabhost, и разрешения запрашивались из Activity внутри tabhost. После запуска отдельного действия, которое запрашивает разрешения, он работает.

Я также столкнулся с ситуацией, когда диалоговое окно разрешения не появляется или приложение сбой при использовании элемента <uses-permission-sdk23> , однако причина кажется системной ошибкой на текущих 6.0 устройствах:

https://code.google.com/p/android/issues/detail?id=189841

Исключение сбоя:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity}: java.lang.NullPointerException: Attempt to get length of null array 

Разрешения организованы по категориям, поэтому некритические предоставляются без отображения диалогового окна.

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

Здесь перечислены нормальные разрешения защиты

После некоторого времени поиска требуется установить значение compileSdkVersion в «android-MNC» или на сегодняшний день до 23. Это требует системы сборки Gradle, которая, как представляется, требует Android Studio. По крайней мере, я не мог найти ни одного руководства о том, как установить его вне файлов градиента.

Я сделал все, что сказал в ответах выше, но диалог еще не показывался, а затем я изменил targetSdkVersion на 23 в градиенте и появился. Надеюсь, это поможет кому-то

 @Override public final void validateRequestPermissionsRequestCode(int requestCode) { // We use 16 bits of the request code to encode the fragment id when // requesting permissions from a fragment. Hence, requestPermissions() // should validate the code against that but we cannot override it as we // can not then call super and also the ActivityCompat would call back to // this override. To handle this we use dependency inversion where we are // the validator of request codes when requesting permissions in // ActivityCompat. if (!mRequestedPermissionsFromFragment && requestCode != -1 && (requestCode & 0xffff0000) != 0) { throw new IllegalArgumentException("Can only use lower 16 bits for requestCode"); } } 

Имел ту же проблему. Позже я понял, что мы должны декларировать каждое разрешение в манифесте (даже если оно является подклассом другого). В моем случае я объявил

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

В моем манифесте и пытался получить доступ к грубому местоположению пользователя.

 ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) 

Исправлена ​​ошибка, добавляя в манифест грубое разрешение.

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

В манифесте я изменил

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="22" /> 

в

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

Может быть, это помогает.

Добавьте разрешение в файл манифеста.

Чтобы добавить к ответу @ shanraisshan, REQUEST_CODE фактически должен быть больше 0, а не просто неотрицательным.

Установите для targetSdkVersion значение 22 .

Была такая же (я предполагаю) проблема, и решение удалялось

 import <app package>.Manifest; 

Автоматически импортируется Android Studio в верхней части файла и заменяет его

 import android.Manifest; 

И начал работать

В моем случае решение является самой строкой

android.permission.READ_CONTACTS

Я сделал Manifest.permission.READ_CONTACTS, который вызвал ошибку молчания (отмечая показ на экране).

Убедитесь, что это правильно

В нашем коде это была простая орфографическая ошибка.

Мы имеем:

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

Должен быть:

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

Если у кого-то из вас есть приложение, которое изменяет / изменяет WRITE_SETTINGS и сталкивается с этой проблемой. Ответ CommonsWare на WRITE_SETTINGS Ambiguity

Я столкнулся с этой проблемой в течение 2 недель, а позже понял, что эта проблема связана с тем, что requestPermissions не работает для запроса разрешения WRITE_SETTINGS . Надеюсь, это поможет: D