Разрешения во время выполнения не работают

Это мой код в методе OnCreate():

if (ContextCompat.checkSelfPermission(thisActivity,
            Manifest.permission.READ_CONTACTS)
    != PackageManager.PERMISSION_GRANTED) {

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

} else {

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

И в моем методе onRequestPermissionsResult():

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case 1:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

              init();
}else{
         finish();
 }

И мой файл манифеста имеет следующие разрешения

<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>

Но я не получаю диалоговое окно с запросом разрешения, и я не могу понять проблему?


person Nishanth G    schedule 04.09.2017    source источник
comment
Проверьте в разделе Настройки->Приложения->(название вашего приложения)->Разрешения, чтобы узнать, есть ли у приложения уже предоставленное разрешение.   -  person Haem    schedule 04.09.2017


Ответы (2)


если ваше приложение ориентировано на Android 6.0 и выше, добавьте разрешение во время выполнения

Начиная с Android 6.0 (уровень API 23) пользователи предоставляют разрешения приложениям во время работы приложения, а не при его установке

добавьте разрешение времени выполнения, используя приведенный ниже код для READ_SMS

String permission = Manifest.permission.READ_SMS;
int grant = ContextCompat.checkSelfPermission(this, permission);
if (grant != PackageManager.PERMISSION_GRANTED) {
    String[] permission_list = new String[1];
    permission_list[0] = permission;
    ActivityCompat.requestPermissions(this, permission_list, 1);
}

и чем обрабатывать такой результат

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(AccountClass.this,"permission granted", Toast.LENGTH_SHORT).show();  
             // perform your action here

        } else {
            Toast.makeText(AccountClass.this,"permission not granted", Toast.LENGTH_SHORT).show();
        }
    }

}
person AskNilesh    schedule 04.09.2017
comment
вы запрашиваете разрешение READ_CONTACTS, и это разрешение не добавлено в файл манифеста - person AskNilesh; 04.09.2017

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

if (ActivityCompat.checkSelfPermission(AddnewPhotoActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED) {

                ActivityCompat.requestPermissions(AddnewPhotoActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_READ_EXTERNAL_STORAGE);

            } else {

                isPermissionGranted(true);
            }

isPermissionGranted(boolean); ====> Вызов метода

public void isPermissionGranted(boolean permission) {
        if (permission) {


           //Your Operation


        } else {

            Toast.makeText(this, "Permission not granted", Toast.LENGTH_SHORT).show();
        }
    }

результат onRequestPermissionsResult

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == REQUEST_READ_EXTERNAL_STORAGE) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                isPermissionGranted(true);

            } else

            {
                isPermissionGranted(false);
            }
        }

    }
person ND1010_    schedule 04.09.2017
comment
Он по-прежнему не показывает диалоговое окно с запросом разрешения? и GrantResults передает PERMISSION_DENIED - person Nishanth G; 04.09.2017