Sobes.tech
Junior

Дар Android кадом намудҳои иҷозатҳо (permissions) мавҷуданд?

sobes.tech AI

Ҷавоб аз AI

Дар Android існує кілька видів дозволів, які визначають рівні доступу додатка до захищених ресурсів і даних користувача.

  • Звичайні дозволи: Дозволи з мінімальним ризиком. Вони автоматично надаються при встановленні додатка і не вимагають явної згоди користувача під час виконання. Наприклад, доступ до Інтернету (android.permission.INTERNET).
  • Небезпечні дозволи: Дозволи з високим ризиком. Вони вимагають явної згоди користувача під час виконання додатка. Доступ до цих ресурсів може вплинути на конфіденційність або роботу пристрою. Наприклад, доступ до контактів (android.permission.READ_CONTACTS), камери (android.permission.CAMERA).
  • Підписані дозволи: Дозволи, які можуть бути надані додаткам, підписаним тим самим сертифікатом, що й додаток, який визначає дозвіл. Використовуються для контролю доступу між компонентами однієї системи або набору додатків.
  • Підписані або системні дозволи: Ці дозволи можуть бути надані або додаткам, підписаним тим самим сертифікатом, або додаткам, що знаходяться в системному розділі.

Крім того, можна виділити:

  • Дозволи при інсталяції: Дозволи, які запитуються і надаються під час інсталяції додатка. До них належать звичайні і підписані дозволи.
  • Дозволи під час виконання: Дозволи, які запитуються під час виконання додатка на пристроях з Android 6.0 (API рівень 23) і вище. До них належать небезпекові дозволи.
  • Особливі дозволи: Спеціальний клас дозволів, які вимагають особливих кроків для їх надання. Наприклад, накладання поверх інших вікон (SYSTEM_ALERT_WINDOW) або зміна системних налаштувань (WRITE_SETTINGS). Вони не належать до звичайних або небезпекових.

У манифесті додатка запитуються всі необхідні дозволи:

<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>

Запит небезпекових дозволів виконується під час виконання:

// Приклад запиту дозволу на читання контактів
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 {
    // Дозвіл вже надано, можна виконувати операцію
}