Android M permission dialog not showing

AndroidPermissionsAndroid 6.0-Marshmallow

Android Problem Overview


I'm currently trying to adapt my application to the new permissions model of Android M.

I'm collecting all the permissions I require, then run

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

requiredPermissions holds the permissions I need like android.permission.WRITE_EXTERNAL_STORAGE.

That routine is definitely executed as I have the Log line in the logcat:

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

But the permissions dialog never shows, let alone is onRequestPermissionsResult() called.

What am I doing wrong? Based on some tutorials I found I'm not missing anything. I only have the emulator for testing, no physical device. This is the about screen from settings: Image

It might be worth mentioning something else: If I try to open the overview of installed apps from the home screen I only get launcher3 has exited. I'm not sure if that might be related.

Does anybody have an idea why it's not showing?

Android Solutions


Solution 1 - Android

I experienced the same issue but later I realized I forgot to add the permission to the manifest file. After adding the uses-permission tag, the system showed the dialog. Maybe helps someone.

Solution 2 - Android

It took my whole day to find out what caused the problem. The original answer helped me.

I fixed by adding tools:remove="android:maxSdkVersion" like this:

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

Solution 3 - Android

I experienced the same issue because I was using the negative value as a REQUEST_CODE.

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

After using positive value, the system showed the dialog. Hope it helps someone.

Solution 4 - Android

Based on the comment from Hilal (thanks a lot!): In my case my app is indeed using tabhost and the permissions were requested from an Activity inside the tabhost. After starting a separate activity that requests the permissions it is working.

Solution 5 - Android

add

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

in AndroidManifest.xml

Note : The Permission which you want to get. Eg: android.permission.ACCESS_FINE_LOCATION etc.

Solution 6 - Android

I just had the same problem. My issue was that I wrote the permission at the wrong place in the manifest. Make sure the uses permission is outside of application:

    <?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">

Solution 7 - Android

I have also come across a situation where the permission dialog doesn't appear or the application crashes when using the <uses-permission-sdk23> element, however the cause appears to be a system bug on current 6.0 devices:

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

Crash exception:

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

Solution 8 - Android

I have the same issue and the problem is solved after adding the shouldShowRequestPermissionRationale like this:

if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
        Manifest.permission.READ_CONTACTS)) {

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

}

Solution 9 - Android

To add to @shanraisshan's answer, the REQUEST_CODE actually has to be greater than 0, not just non-negative.

Solution 10 - Android

In our code, it was a simple spelling mistake.

We had:

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

It should be:

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

Solution 11 - Android

I was doing two calls to requestPermissions(), one right after the other. This error message appeared in Logcat (note the misspelling on "request"):

Can reqeust only one set of permissions at a time

requestPermissions() is actually designed to take multiple requests at once; that's what the String array is for.

Solution 12 - Android

In my case, the permission I was requesting (WRITE_SETTINGS) was more special and required Settings Activity to launch. So dialog was not showing up.

I had to get its permission using the following code:

Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + context.getPackageName()));
startActivityForResult(intent, CODE_WRITE_SETTINGS_PERMISSION);

Solution 13 - Android

Yet another cause for not getting the permission dialog to show when requesting a dangerous permission...

I had to do Build -> Clean Project and then Build -> Rebuild Project. I guess Android Studio didn't pick up on the changes I made in the manifest.

Solution 14 - Android

I had a similar issue caused by the wrong case of the permission constant in the manifest, I was using read_contacts in lower case:

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

After changing read_contacts to uppercase it started working as expected

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

Solution 15 - Android

Permissions are organised into categories so non-critical ones are granted without the dialog being shown.

I found this the hard way with internet permission, if you're having this issue then changing to a critical permission such as read_contacts will allow you to test your flow and reveal whether the issue is the permission being non-critical or something else.

Normal protection permissions are listed [here] 1

Solution 16 - Android

In the manifest, I changed

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

to

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

Maybe that helps.

Solution 17 - Android

Add permission in the manifest file as well.

Solution 18 - Android

If anyone of you guys has an application that changes/modifies WRITE_SETTINGS and are facing this issue. Check out CommonsWare's Answer to WRITE_SETTINGS Ambiguity

I was facing this issue for 2 weeks and later realised that this issue was due to the fact that requestPermissions doesn't work for requesting WRITE_SETTINGS permission. Hope this helps :D

Solution 19 - Android

In my case I had requested "ACCESS_COARSE_LOCATION" in my manifest file and then request for "ACCESS_FINE_LOCATION" permission in code that's why the Permission Dialog was not opening.

Solution 20 - Android

After searching a while it appears it is required to set the value compileSdkVersion to "android-MNC" or as of today to 23. That requires the Gradle build system which then seems to require Android Studio. At least I couldn't find a single manual about how to set it outside the gradle files.

Solution 21 - Android

I did all the things said in above answers but still dialog was not showing and then I changed targetSdkVersion to 23 in gradle and it appeared . Hope this helps someone

Solution 22 - Android

@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");
        }
    }

Solution 23 - Android

Had the same issue. Later I realized that we have to declare each and every permission in manifest (even if one is a subclass of another). In my case I declared

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

in my manifest and was trying to access user's coarse location.

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

Fixed the problem by adding coarse permission as well in manifest.

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

Solution 24 - Android

Set your targetSdkVersion to 22.

Solution 25 - Android

had the same (i guess) problem and the solution was removing

import <app package>.Manifest;

autoimported by Android Studio at the top of the file and substitute it with

import android.Manifest; 

and started working

Solution 26 - Android

In my case the solution is the string itself

android.permission.READ_CONTACTS

I did Manifest.permission.READ_CONTACTS which caused silence error (Noting show on the screen).

Make sure that this is correct

Solution 27 - Android

My Android targetSDK version is 28.

I don't see any pop ups shown to user requesting for permission which are listed in android Manifest.xml as . During both installation, installing .apk using USB and installing app from google play store. So I added below code in my activity it will ask user permission during runtime

ActivityCompat.requestPermissions(MyActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE}, 1);

Solution 28 - Android

I was requesting permission through code, but had missed adding the <uses-permission ..> tag in manifest !

Solution 29 - Android

Change the final constant value to 1.

private static final int REQUEST_PERMISSION_WRITE = 1;

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_PERMISSION_WRITE);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJensView Question on Stackoverflow
Solution 1 - AndroidTamás CsehView Answer on Stackoverflow
Solution 2 - AndroidKhang .NTView Answer on Stackoverflow
Solution 3 - AndroidshanraisshanView Answer on Stackoverflow
Solution 4 - AndroidJensView Answer on Stackoverflow
Solution 5 - AndroidVinil ChandranView Answer on Stackoverflow
Solution 6 - AndroidLoïs TalagrandView Answer on Stackoverflow
Solution 7 - AndroidTheITView Answer on Stackoverflow
Solution 8 - AndroidHai nguyen thanhView Answer on Stackoverflow
Solution 9 - AndroidjoakimView Answer on Stackoverflow
Solution 10 - AndroidRJ.View Answer on Stackoverflow
Solution 11 - AndroidpaperduckView Answer on Stackoverflow
Solution 12 - AndroidM. Usman KhanView Answer on Stackoverflow
Solution 13 - AndroidMagnusView Answer on Stackoverflow
Solution 14 - AndroidRobertoView Answer on Stackoverflow
Solution 15 - AndroidNick CardosoView Answer on Stackoverflow
Solution 16 - Androidmogile_oliView Answer on Stackoverflow
Solution 17 - AndroidPhani varmaView Answer on Stackoverflow
Solution 18 - AndroidIrfan SView Answer on Stackoverflow
Solution 19 - AndroidAkash BisariyaView Answer on Stackoverflow
Solution 20 - AndroidJensView Answer on Stackoverflow
Solution 21 - AndroidNaveen RaoView Answer on Stackoverflow
Solution 22 - AndroidAhmad AghazadehView Answer on Stackoverflow
Solution 23 - AndroidshahrukhamdView Answer on Stackoverflow
Solution 24 - AndroidIman MarashiView Answer on Stackoverflow
Solution 25 - AndroidAlberto CappellinaView Answer on Stackoverflow
Solution 26 - AndroidKadir ErturkView Answer on Stackoverflow
Solution 27 - AndroidSmithaView Answer on Stackoverflow
Solution 28 - AndroidAndroidGuyView Answer on Stackoverflow
Solution 29 - Androidanto004View Answer on Stackoverflow