Activity.requestPermissions против ActivityCompat.requestPermissions - PullRequest
2 голосов
/ 25 июня 2019

Диалоговое окно прав доступа отображается в Android 6.0 или выше, поэтому имеет смысл Activity.requestPermissions(...), который был добавлен на уровне API 23.

Но почему еще один (ActivityCompat.requestPermissions(...)) должен использоваться для Android ниже 6.0? Отображает ли это диалог запроса разрешения во время выполнения в более низких версиях?


  • В чем разница между

    Activity.requestPermissions(permissions, requestCode)
    

    и

    ActivityCompat.requestPermissions(activity, permissions, requestCode)
    
  • Какой я должен использовать?

Ответы [ 2 ]

2 голосов
/ 25 июня 2019

Показывает ли это диалоговое окно запроса разрешения во время выполнения в более низких версиях?

Нет. На более низких версиях такого диалога нет. Он просто вызовет ваш метод onRequestPermissionsResult(), чтобы сообщить вам, что у вас есть разрешения (поскольку, по определению, вы уже это делаете).

В чем разница между

Activity#requestPermissions() предназначен для приложений с minSdkVersion от 23 или выше или для приложений, разработчикам которых нравится вызывать if (Build.VERSION.SDK_INT >= 23), чтобы избежать этого вызова на старых устройствах.

ActivityCompat.requestPermissions() для любого приложения, так как оно «работает правильно» на всех поддерживаемых уровнях API (обратно к API Level 14 IIRC).

Какой я должен использовать?

Если ваш minSdkVersion равен 23 или выше, не стесняйтесь использовать Activity#requestPermissions(). В противном случае, я рекомендую ActivityCompat.requestPermissions().

1 голос
/ 25 июня 2019

Но почему еще один (ActivityCompat.requestPermissions (...)) должен использоваться для Android ниже 6.0?

Он существует потому, что в Android существует два типа Acvivity, android.app.Activity документы и android.support.v4.app.ActivityCompat документы .

  • Activity предназначен для использования в устройствах с минимальной версией SDK 14 iirc
  • ActivityCompat для обратной совместимости (SDK 9 и выше). Он позволяет вам иметь доступ к поддерживаемым новым функциям и темам Материалов без каких-либо серьезных изменений, которые новые версии ОС представили для достижения новых функций и пользовательского интерфейса.

Показывает ли это диалоговое окно запроса разрешения во время выполнения в более низких версиях?

Нет. Android 6.0 является первым, чтобы показать диалоги прав доступа во время выполнения, и поэтому предыдущие версии Android не могут их показывать. Этот фрагмент кода фактически игнорируется предыдущими версиями ОС iirc.

Какой я должен использовать?

Это полностью зависит от того, какой тип Activity вы используете. Если вы занимаетесь Activity, то используйте Activity.requestPermissions(permissions, requestCode). если вы используете ребенка ActivityCompat, используйте ActivityCompat.requestPermissions(activity, permissions, requestCode).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...