Назад к вопросам
Junior
68
questionbank

Какие виды разрешений (permissions) существуют в Android?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

В Android существует несколько видов разрешений, которые определяют уровни доступа приложения к защищенным ресурсам и данным пользователя.

  • Normal permissions: Разрешения с минимальным риском. Они предоставляются автоматически при установке приложения и не требуют явного согласия пользователя во время выполнения. Например, доступ к интернету (android.permission.INTERNET).
  • Dangerous permissions: Разрешения с высоким риском. Они требуют явного согласия пользователя во время выполнения приложения. Доступ к этим ресурсам может повлиять на конфиденциальность или работу устройства. Например, доступ к контактам (android.permission.READ_CONTACTS), камере (android.permission.CAMERA).
  • Signature permissions: Разрешения, которые могут быть предоставлены приложениям, подписанным тем же сертификатом, что и приложение, определяющее разрешение. Используются для контроля доступа между компонентами одной системы или набора приложений.
  • SignatureOrSystem permissions: Эти разрешения могут быть предоставлены либо приложениям, подписанным тем же сертификатом, либо приложениям, находящимся в системном разделе.

Кроме того, можно выделить:

  • Install-time permissions: Разрешения, которые запрашиваются и предоставляются во время установки приложения. К ним относятся normal и signature permissions.
  • Runtime permissions: Разрешения, которые запрашиваются во время выполнения приложения на устройствах с Android 6.0 (API level 23) и выше. К ним относятся dangerous permissions.
  • Special permissions: Особый класс разрешений, которые требуют специальных шагов для предоставления. Например, наложение поверх других окон (SYSTEM_ALERT_WINDOW) или изменение системных настроек (WRITE_SETTINGS). Они не относятся ни к normal, ни к dangerous.

В манифесте приложения запрашиваются все необходимые разрешения:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

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

    <application
        ...
        >
        ...
    </application>
</manifest>

Запрос dangerous permissions выполняется во время выполнения:

// Пример запроса разрешения на чтение контактов
if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.READ_CONTACTS)
    != PackageManager.PERMISSION_GRANTED) {

    ActivityCompat.requestPermissions(this,
        arrayOf(Manifest.permission.READ_CONTACTS),
        MY_PERMISSIONS_REQUEST_READ_CONTACTS)

} else {
    // Разрешение уже предоставлено, можно выполнять операцию
}