2016-09-15 2 views
2

Как я могу дать пользователю возможность изменить свои права доступа в приложении, , которое он уже установил для предоставления/отказа?Как изменить отклоненное/предоставленное разрешение в Android M?

Предположим, пользователь отказал в разрешении. Позже он хочет предоставить это разрешение. Возможно ли это? Как я могу это сделать?

+0

Если пользователь выберет шоу никогда, то он/она должна изменить в настройках только в противном случае мы можем применить код для проверки пользователя разрешения каждый раз достигает на этой деятельности –

+0

Механизм такой же; Вы должны сохранить разрешение, которое было отклонено, и вы должны спросить с помощью того же метода. –

+0

Когда вы выполняете какое-либо действие, которое требует ** РАЗРЕШЕНИЯ **, в это время вам необходимо проверить это разрешение, предоставленное пользователем, или нет. Если ** не ** в то время, вы должны снова запросить это разрешение. Пока пользователь не предоставит это разрешение, пользователь не сможет выполнить эту конкретную задачу. –

ответ

3

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

public static void checkPermissionForExternalStorage(final Context mContext) { 

    if (Build.VERSION.SDK_INT >= 23) { 

     int writeExternalStorage = ContextCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE); 
     if (writeExternalStorage != PackageManager.PERMISSION_GRANTED) { 

      ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_ASK_PERMISSIONS_FOR_STORAGE); 
      return; 
     } 

     //Do your stuff 

    } else { 

     //Do your stuff 
    } 
} 



public static void startInstalledAppDetailsActivity(Context mContext) { 

    Intent i = new Intent(); 
    i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
    i.addCategory(Intent.CATEGORY_DEFAULT); 
    i.setData(Uri.parse("package:" + mContext.getPackageName())); 
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
    i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 
    mContext.startActivity(i); 
} 



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

    switch (requestCode) { 



     case REQUEST_CODE_ASK_PERMISSIONS_FOR_STORAGE: 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       //Do your stuff 
      } else { 
       // Permission Denied 

       if (!ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
        showMessageOKCancel("The app was not allowed to write to your storage. Hence, it cannot function properly. Please consider granting it this permission. Tap Settings > Permissions, and turn Storage on.", 
          new DialogInterface.OnClickListener() { 
           @Override 
           public void onClick(DialogInterface dialog, int which) { 
            startInstalledAppDetailsActivity((Activity) mContext); 
           } 
          }); 
       } 


       Toast.makeText(mContext, "Write to external storage permission request denied.", Toast.LENGTH_SHORT).show(); 
      } 
      break; 
     default: 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 
+0

Приятно, что сейчас работает. Благодаря! Ничего себе, я вижу, что вы добавили код. Это круто. – lidox

+0

С удовольствием :) – Nitesh

0

Да, вы можете это сделать.

Существует обратный вызов, если onRequestPermissionsResult, в котором вы узнаете, предоставил ли пользователь разрешение или нет. Если пользователь не предоставил разрешение, вы можете снова запросить его по мере необходимости.

+0

@lodox Мой ответ был таким же, как ответ, который вы приняли. Но я специально не ставил код для вашего обучения. Но это нормально, если вы ожидаете кормления ложкой. Удачи – Nikhil

1

Вы показать пользователю диалоговое окно с запросом, чтобы перейти к настройкам приложения и изменить разрешение там, вы должны мотивировать его как-то, скажите, почему вам нужно разрешение. И вы кладете «Открытые настройки» бутон, который вызывает следующие функции:

private void startInstalledAppDetailsActivity() { 
    final Intent i = new Intent(); 
    i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
    i.addCategory(Intent.CATEGORY_DEFAULT); 
    i.setData(Uri.parse("package:" + getPackageName())); 
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
    i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 
    startActivity(i); 
} 
+0

Спасибо за ваш ответ! :) – lidox

1

Есть несколько способов, чтобы достичь того, что вы ищете:

  1. Вы можете создать отдельный вид/Фрагмент только для в этой цели заручились все разрешения, требуемые вашим приложением, оттуда вы можете позвонить requestPermission().

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

  3. Пользователь может также предоставить разрешение на использование приложения от Settings. Так что может быть хорошей идеей направить пользователя (например, через диалог), чтобы позднее изменить разрешение, если он этого пожелает, с Settings.

Смежные вопросы