Sobes.tech
Junior

Koje vrste dozvola (permissions) postoje u Androidu?

sobes.tech АИ

Одговор од АИ

У 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 {
    // Дозвола је већ дата, може се извршити операција
}