Sobes.tech
Junior

Ce tipuri de permisiuni (permissions) există în Android?

sobes.tech AI

Răspuns de la AI

Pe Android, există mai multe tipuri de permisiuni care determină nivelurile de acces ale aplicației la resurse protejate și datele utilizatorului.

  • Permisiuni normale: Permisiuni cu risc minim. Sunt acordate automat la instalarea aplicației și nu necesită consimțământ explicit din partea utilizatorului în timpul funcționării. De exemplu, accesul la internet (android.permission.INTERNET).
  • Permisiuni periculoase: Permisiuni cu risc ridicat. Necesită consimțământul explicit al utilizatorului în timpul funcționării aplicației. Accesul la aceste resurse poate afecta confidențialitatea sau funcționarea dispozitivului. De exemplu, accesul la contacte (android.permission.READ_CONTACTS), cameră (android.permission.CAMERA).
  • Permisiuni de semnătură: Permisiuni care pot fi acordate aplicațiilor semnate cu același certificat ca și aplicația care definește permisiunea. Folosite pentru controlul accesului între componentele aceluiași sistem sau set de aplicații.
  • Permisiuni de semnătură sau sistem: Aceste permisiuni pot fi acordate fie aplicațiilor semnate cu același certificat, fie aplicațiilor din secțiunea de sistem.

De asemenea, se pot distinge:

  • Permisiuni la instalare: Permisiuni solicitate și acordate în timpul instalării aplicației. Include permisiuni normale și de semnătură.
  • Permisiuni în timpul rulării: Permisiuni solicitate în timpul funcționării pe dispozitive cu Android 6.0 (nivel API 23) și mai sus. Include permisiuni periculoase.
  • Permisiuni speciale: O clasă specială de permisiuni care necesită pași speciali pentru a fi acordate. De exemplu, suprapunerea peste alte ferestre (SYSTEM_ALERT_WINDOW) sau modificarea setărilor sistemului (WRITE_SETTINGS). Acestea nu aparțin nici permisiunilor normale, nici celor periculoase.

În manifestul aplicației se solicită toate permisiunile necesare:

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

Solicitarea permisiunilor periculoase se face în timpul rulării:

// Exemplu de solicitare a permisiunii pentru citirea contactelor
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 {
    // Permisiunea a fost deja acordată, se poate efectua operația
}