2017-01-27 3 views
0

Android 6Разрешение запрос (WRITE_EXTERNAL_STORAGE) не отображается

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

private void checkDiskPermission() 
{ 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
     Toast.makeText(this, "no disk access" , Toast.LENGTH_LONG).show(); 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
    } 
    else 
    { 
     Toast.makeText(this, "disk access - OK" , Toast.LENGTH_LONG).show(); 
    } 

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     Toast.makeText(this, "no GPS access" , Toast.LENGTH_LONG).show(); 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 0); 
    } 
    else 
    { 
     Toast.makeText(this, "GPS access - OK" , Toast.LENGTH_LONG).show(); 
    } 
} 

Этот код работает отлично для разрешения GPS, но не для разрешения WRITE_EXTERNAL_STORAGE. Диалог появляется только в одном случае.

Почему это так?

Спасибо!

+0

Проверить это решение http://stackoverflow.com/a/37160573/842607 –

ответ

1

Потому что вы запрашиваете его 2 раза одновременно. Именно поэтому он принимает последний запрос.

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

Как this-

private void checkDiskPermission() 
{ 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED 
      && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
      && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     Toast.makeText(this, "No Permissions" , Toast.LENGTH_LONG).show(); 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 0); 
    } 
    else 
    { 
     Toast.makeText(this, "Has Permissions" , Toast.LENGTH_LONG).show(); 
    } 
} 
+0

я проверить это. Благодаря! – yurart

1

Если permission > 1, чем оно совмещено вместе во время выполнения.

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

Вещи, чтобы иметь в виду, спрашивая Multiple разрешение:

  1. Количество разрешений.
  2. Никогда не переспрашивать Checkox

Look at the Source for Multiple Permission Request

+0

спасибо за ответ. Но Вишал Чходвани был первым. – yurart

0

ваш код работает отлично. Никакой проблемы в java-коде для разрешения времени выполнения. После проверки вашего манифеста вы добавите эту строку или нет?

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

Да, я добавил. Я узнал, что у меня было несколько одновременных запросов на разрешение. Разделение их решило проблему. Я запрашиваю разрешения только тогда, когда пользователь хочет использовать функции GPS в программе или когда он/она хочет использовать функции, которые записывают данные на диск. – yurart

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