Normal Permission în Android — ce este, niveluri de protecție și principiu de funcționare

Autor: IT Sectr Publicat: 2026-05-20 Timp de citire: 8 min

Normal Permission — o categorie de permisiuni în Android pe care sistemul le acordă automat fără a întreba utilizatorul. Conform Android Developer Documentation, 2024, permisiunile normale au ProtectionLevel normal și nu necesită dialog runtime, spre deosebire de cele periculoase. Ele acoperă accesul la internet, starea rețelei și vibrații, fără a crea riscuri pentru datele confidențiale ale utilizatorului.

Principalul

  • Normal Permission — categoria permisiunilor Android cu ProtectionLevel normal, acordate automat la instalare.
  • Pentru utilizare este suficient să adăugați uses-permission în manifest — dialogul nu se afișează utilizatorului.
  • Diferența principală față de cele periculoase — absența solicitării runtime și imposibilitatea revocării prin setări.
  • Lista include INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE și alte constante de sistem.
  • Nivelul de protecție poate fi verificat prin PackageManager.getPermissionInfo în codul aplicației.

Ce este Normal Permission în Android

Normal Permission — un tip de permisiuni de sistem Android cu ProtectionLevel normal, acordat aplicației automat în momentul instalării. Dezvoltatorul nu trebuie să scrie cod pentru solicitare — este suficient să indice permisiunea în AndroidManifest.xml. Utilizatorul nu vede dialoguri și nu poate revoca normal permission separat, doar ștergând întreaga aplicație.

Sistemul Android clasifică permisiunile normale ca fiind cu risc scăzut — ele nu oferă acces la date personale, cameră sau microfon. Exemple tipice: acces la internet, gestionarea vibrațiilor, citirea stării Wi-Fi. Conform Android Security Model (2024), aproximativ 40 la sută din toate permisiunile de sistem aparțin categoriei normal.

O proprietate importantă — permisiunile normale nu se revocă în runtime prin Settings. Dacă utilizatorul dorește să interzică accesul, singura cale este ștergerea aplicației. Dezvoltatorii ar trebui să țină cont de acest lucru în arhitectură, dar pentru utilizatori o astfel de abordare simplifică interacțiunea: fără dialoguri la prima pornire.

Istoria apariției categoriei

Împărțirea în permisiuni normale și periculoase a apărut în Android 6.0 Marshmallow (API 23). Înainte de această versiune, toate permisiunile erau solicitate la instalare — utilizatorul vedea o listă unică și o accepta sau respingea în totalitate. Normal Permission a păstrat acest model pentru operațiunile cu risc scăzut, iar Dangerous a trecut la solicitarea runtime. Această modificare a îmbunătățit experiența utilizatorului și a crescut simultan securitatea.

Ce API necesită Normal Permission

Multe API de sistem Android necesită indicarea explicită a permisiunii normale, chiar dacă accesul este automat. De exemplu, clasa ConnectivityManager necesită ACCESS_NETWORK_STATE, VibratorService necesită VIBRATE, WifiManager necesită ACCESS_WIFI_STATE. Fără declararea uses-permission corespunzătoare, apelarea acestor API va duce la SecurityException.

Cum funcționează ProtectionLevel normal

ProtectionLevel normal — nivelul minim de protecție în Android Permission System. Permisiunile cu acest nivel se declară în manifest, iar sistemul verifică declarația la instalare, acordând acces fără intervenția utilizatorului. Nu se afișează niciun element UI, nu se apelează niciun callback.

Mecanismul de verificare funcționează la nivelul PackageManager. La instalarea APK-ului, sistemul scanează toate tag-urile uses-permission, determină nivelul de protecție al fiecărei permisiuni prin potrivirea cu definițiile de sistem din fișierele permissions.xml și pentru normal-level pur și simplu înregistrează accesul. Procesul durează milisecunde și nu necesită interacțiune cu interfața utilizatorului.

Algoritmul de acordare arată astfel:

  • Sistemul citește manifestul în momentul instalării aplicației
  • Potrivește protectionLevel în /etc/permissions/ pe dispozitiv
  • La valoarea normal — acordă automat accesul
  • Permisiunea rămâne activă până la ștergerea completă a aplicației

Utilizatorul nu poate revoca permisiunea normală prin interfață. În setările aplicației, în secțiunea Permisiuni, se afișează doar permisiunile periculoase. Acest lucru contrastează cu iOS, unde fiecare permisiune necesită confirmare separată indiferent de nivelul de sensibilitate al funcției.

Normal Permission vs Dangerous Permission

Normal și Dangerous Permission — două categorii opuse de protecție în Android. Diferența principală constă în modul de acordare: cele normale se acordă automat la instalare, cele periculoase necesită consimțământ explicit prin dialog runtime. Această diferență este încorporată în arhitectura de securitate Android începând cu versiunea 6.0 Marshmallow.

Compararea caracteristicilor cheie:

CaracteristicăNormal PermissionDangerous Permission
ProtectionLevelnormaldangerous
Solicitarea utilizatoruluiNu este necesarăDialog runtime obligatoriu
Posibilitatea de revocareNu, doar ștergerea aplicațieiDa, prin setări în orice moment
Verificare în codÎntotdeauna PERMISSION_GRANTEDcheckSelfPermission obligatoriu
ExempleINTERNET, VIBRATE, ACCESS_NETWORK_STATECAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION

Diferența în solicitarea utilizatorului

Utilizatorul nu vede niciun dialog la solicitarea Normal Permission. Dacă aplicația are nevoie de INTERNET — îl primește în tăcere. Pentru Dangerous Permission, sistemul afișează un dialog modal cu descrierea accesului solicitat. Utilizatorul apasă Allow sau Deny, iar mai târziu poate revoca permisiunea în orice moment prin Settings. Aceasta este diferența cheie UX care determină strategia de dezvoltare a interfeței.

Când să alegem Normal

Normal trebuie utilizat în toate cazurile când accesul nu se referă la date sensibile. ACCESS_NETWORK_STATE pentru verificarea conexiunii, VIBRATE pentru feedback tactil, INTERNET pentru cereri HTTP — toate acestea sunt permisiuni normale. Utilizarea nivelului dangerous acolo unde este suficient normal este o practică proastă, creând dialoguri inutile și reducând încrederea utilizatorului în aplicație.

Lista permisiunilor normale în Android

Android definește câteva zeci de permisiuni normale, fiecare corespunzând unei funcții de sistem specifice. Toate sunt accesibile prin constantele clasei Manifest.permission. Mai jos este lista celor mai frecvent utilizate în dezvoltarea aplicațiilor.

ConstantaAccesDescriere
INTERNETRețeaDeschiderea socket-urilor de rețea pentru cereri HTTP
ACCESS_NETWORK_STATERețeaObținerea informațiilor despre starea rețelei
ACCESS_WIFI_STATEWi-FiCitirea informațiilor despre conexiunile Wi-Fi
VIBRATEVibrațieGestionarea motorului de vibrații al dispozitivului
BLUETOOTHBluetoothConectarea la dispozitive Bluetooth
WAKE_LOCKAlimentareBlocarea trecerii procesorului în somn
SET_ALARMAlarmăSetarea alarmei prin AlarmManager
CHANGE_NETWORK_STATERețeaModificarea stării conexiunii de rețea

Grupurile permisiunilor normale

Permisiunile normale nu sunt grupate în Permission Group în scopuri de afișare în UI. Grupurile în Android sunt destinate ecranului de setări, unde se afișează doar permisiunile periculoase. Cu toate acestea, logic, permisiunile normale pot fi împărțite în categorii: de rețea (INTERNET, ACCESS_NETWORK_STATE), hardware (VIBRATE, WAKE_LOCK), de sistem (SET_ALARM) și permisiuni Bluetooth.

Unele constante din Manifest.permission pot schimba nivelul de protecție pe diferite versiuni de Android. De exemplu, BLUETOOTH_CONNECT pe Android 12+ a devenit o permisiune periculoasă cu solicitare runtime, deși în versiunile mai vechi era normal. Dezvoltatorilor li se recomandă să verifice protectionLevel-ul actual pentru API-ul țintă prin documentație.

Verificarea Normal Permission prin PackageManager

Dezvoltatorul poate verifica programatic dacă o permisiune este normală prin PackageManager. Metoda getPermissionInfo returnează PermissionInfo, al cărui câmp protectionLevel conține flag-ul PermissionInfo.PROTECTION_NORMAL. Acest lucru este util pentru procesarea dinamică și depanare.

kotlin
fun isNormalPermission(permission: String): Boolean {
    val pm = packageManager
    val info = pm.getPermissionInfo(
        permission,
        PackageManager.GET_META_DATA
    )
    return info.protectionLevel ==
        PermissionInfo.PROTECTION_NORMAL
}

Cum se declară Normal Permission în manifest

Declararea Normal Permission în AndroidManifest.xml este cea mai simplă operațiune, care necesită un singur tag uses-permission. Configurarea suplimentară protectionLevel nu este necesară, deoarece nivelul de protecție este determinat de definiția de sistem, nu de manifestul aplicației. Dezvoltatorul indică pur și simplu numele complet al constantei.

xml
<!-- AndroidManifest.xml -->
<uses-permission
    android:name="android.permission.INTERNET" />
<uses-permission
    android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
    android:name="android.permission.VIBRATE" />

Sistemul la instalare procesează toate declarațiile. Dacă cel puțin una dintre permisiunile indicate are protectionLevel diferit de normal, va fi necesară solicitarea runtime. INTERNET — cea mai populară permisiune normală, prezentă în majoritatea aplicațiilor Android, în special a celor care execută cereri HTTP sau încarcă conținut din rețea.

Exemplu de manifest complet

Exemplul complet de AndroidManifest.xml cu permisiuni normale și periculoase demonstrează diferența: sintactic, tag-urile uses-permission sunt identice, dar în faza de execuție INTERNET și VIBRATE vor fi acordate automat, iar CAMERA va necesita dialog.

xml
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Normal permissions -->
    <uses-permission
        android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.VIBRATE" />

    <!-- Dangerous permission -->
    <uses-permission
        android:name="android.permission.CAMERA" />
</manifest>

Manifest Merger și Normal Permission

La utilizarea bibliotecilor — Google Play Services, Firebase, Glide — acestea pot adăuga propriile uses-permission în manifestul final prin Manifest Merger. Unele dintre ele sunt normale (INTERNET pentru Firebase), altele periculoase (ACCESS_FINE_LOCATION pentru Google Maps). Dezvoltatorul ar trebui să verifice manifestul final îmbinat în build/outputs/logs/manifest-merger-report.txt înainte de publicare.

Limitările Normal Permission

Normal Permission are două limitări fundamentale: imposibilitatea revocării de către utilizator și absența UI-ului pentru gestionare. Dacă utilizatorul nu are încredere în aplicație, dar permisiunea normală a fost deja acordată automat — singura soluție este ștergerea aplicației. Acest lucru creează un anumit risc, deoarece permisiunile normale nu sunt blocate de instrumentele standard Android.

O limitare suplimentară apare pe dispozitivele cu mai multe profiluri (Work Profile, Multiple Users). Normal Permission se acordă imediat pentru toate profilurile — aplicația nu poate limita permisiunea doar la unul. În scenariile corporative, acest lucru se rezolvă prin Managed Configurations.

Nu se poate verifica dacă aplicația utilizează Normal Permission în momentul respectiv. Metoda de sistem checkSelfPermission funcționează doar pentru permisiunile periculoase. Pentru normal, returnează întotdeauna PERMISSION_GRANTED, ceea ce nu reflectă activitatea reală. Acest lucru trebuie luat în considerare la auditul de securitate și analiza comportamentului aplicației.

De asemenea, merită reținut că unii producători de dispozitive (Xiaomi, Huawei, Samsung) modifică comportamentul standard al permisiunilor. Pe firmware-ul lor, Normal Permission poate necesita permisiuni suplimentare în interfața proprietară MIUI sau EMUI. Dezvoltatorilor li se recomandă să testeze funcționarea pe dispozitive reale ale diferiților producători.

Întrebări frecvente

Cu ce se deosebește Normal Permission de Dangerous?

Normal Permission se acordă automat la instalare fără dialog. Dangerous necesită solicitare runtime cu consimțământul explicit al utilizatorului și poate fi revocat prin setări. Normal folosește ProtectionLevel normal, Dangerous — protectionLevel dangerous.

Este necesar să scriem cod pentru Normal Permission?

Nu, pentru permisiunile normale este suficient să declarați uses-permission în AndroidManifest.xml. Codul pentru solicitare nu este necesar — sistemul acordă accesul automat. Acest lucru le deosebește de cele periculoase, unde este necesar ActivityCompat.requestPermissions.

Care Normal Permission sunt cele mai populare?

Cele mai frecvent utilizate: INTERNET (cereri de rețea), ACCESS_NETWORK_STATE (verificarea conexiunii), VIBRATE (feedback tactil) și WAKE_LOCK (menținerea procesorului). Practic, fiecare aplicație Android folosește cel puțin INTERNET.

Poate fi revocat Normal Permission?

Nu, Normal Permission nu poate fi revocat prin setările aplicației. Singura modalitate de a opri accesul este ștergerea aplicației. Aceasta este diferența cheie față de permisiunile periculoase, pe care utilizatorul le poate dezactiva în orice moment.

Cum verificăm ProtectionLevel-ul unei permisiuni?

Utilizați PackageManager.getPermissionInfo, transmițând numele string al permisiunii. Metoda returnează PermissionInfo cu câmpul protectionLevel. Comparați cu constantele PermissionInfo.PROTECTION_NORMAL sau PROTECTION_DANGEROUS pentru a determina categoria.

Concluzii

  • Normal Permission — categoria permisiunilor Android cu ProtectionLevel normal, acordată automat la instalare.
  • Pentru declarare este suficient tag-ul uses-permission în AndroidManifest.xml fără cod runtime.
  • Se deosebesc de cele periculoase prin absența dialogului, imposibilitatea revocării și nivelul scăzut de risc.
  • Cele mai populare: INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE și WAKE_LOCK.
  • ProtectionLevel se verifică prin PackageManager.getPermissionInfo în cod.
  • Permisiunile normale nu se afișează pe ecranul de setări al aplicației.
  • La utilizarea bibliotecilor, verificați manifestul final prin Manifest Merger.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și