Normal Permission in Android — cos’è, livelli di protezione e principio di funzionamento

Autore: IT Sectr Pubblicato: 2026-05-20 Tempo di lettura: 8 min

Normal Permission è una categoria di autorizzazioni in Android che il sistema concede automaticamente senza chiedere all’utente. Secondo Android Developer Documentation, 2024, le autorizzazioni normali hanno ProtectionLevel normal e non richiedono un dialogo runtime, a differenza di quelle pericolose. Coprono l’accesso a internet, allo stato della rete e alla vibrazione, senza creare rischi per i dati sensibili dell’utente.

Punti chiave

  • Normal Permission è una categoria di autorizzazioni Android con ProtectionLevel normal, concesse automaticamente all’installazione.
  • Per usarla, basta aggiungere uses-permission nel manifest — nessun dialogo viene mostrato all’utente.
  • La differenza principale da quelle pericolose è l’assenza di una richiesta runtime e l’impossibilità di revoca tramite impostazioni.
  • L’elenco include INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE e altre costanti di sistema.
  • È possibile verificare il livello di protezione tramite PackageManager.getPermissionInfo nel codice dell’applicazione.

Cos’è Normal Permission in Android

Normal Permission è un tipo di autorizzazione di sistema in Android con ProtectionLevel normal, concessa a un’applicazione automaticamente al momento dell’installazione. Lo sviluppatore non deve scrivere codice per richiederla — basta dichiarare l’autorizzazione in AndroidManifest.xml. L’utente non vede alcun dialogo e non può revocare un’autorizzazione normale separatamente, solo disinstallando l’intera applicazione.

Il sistema Android classifica le autorizzazioni normali come a basso rischio — non concedono accesso a dati personali, fotocamera o microfono. Esempi tipici: accesso a internet, controllo vibrazione, lettura stato Wi-Fi. Secondo Android Security Model (2024), circa il 40 per cento di tutte le autorizzazioni di sistema appartiene alla categoria normale.

Una proprietà importante — le autorizzazioni normali non possono essere revocate in runtime tramite Impostazioni. Se l’utente vuole negare l’accesso, l’unico modo è disinstallare l’applicazione. Gli sviluppatori dovrebbero considerarlo nell’architettura, ma per gli utenti questo approccio semplifica l’interazione: nessun dialogo al primo avvio.

Storia della categoria

La divisione in autorizzazioni normali e pericolose è apparsa in Android 6.0 Marshmallow (API 23). Prima di questa versione, tutte le autorizzazioni venivano richieste all’installazione — l’utente vedeva un unico elenco e lo accettava o rifiutava nel suo insieme. Normal Permission ha mantenuto questo modello per le operazioni a basso rischio, mentre Dangerous è passato alla richiesta runtime. Questo cambiamento ha migliorato l’esperienza utente e allo stesso tempo aumentato la sicurezza.

Quali API richiedono Normal Permission

Molte API di sistema Android richiedono una dichiarazione esplicita di un’autorizzazione normale, anche se l’accesso è automatico. Ad esempio, la classe ConnectivityManager richiede ACCESS_NETWORK_STATE, VibratorService richiede VIBRATE, WifiManager richiede ACCESS_WIFI_STATE. Senza dichiarare il corrispondente uses-permission, la chiamata di queste API provocherà una SecurityException.

Come funziona ProtectionLevel normal

ProtectionLevel normal è il livello minimo di protezione nel Sistema di autorizzazioni Android. Le autorizzazioni con questo livello vengono dichiarate nel manifest, e il sistema verifica la dichiarazione all’installazione, concedendo l’accesso senza intervento dell’utente. Nessun elemento dell’interfaccia viene mostrato, nessun callback viene invocato.

Il meccanismo di verifica funziona a livello di PackageManager. Durante l’installazione dell’APK, il sistema scansiona tutti i tag uses-permission, determina il livello di protezione di ogni autorizzazione confrontandolo con le definizioni di sistema nei file permissions.xml, e per il livello normale registra semplicemente l’accesso. Il processo richiede millisecondi e non necessita di interazione con l’interfaccia utente.

L’algoritmo di concessione funziona come segue:

  • Il sistema legge il manifest al momento dell’installazione dell’applicazione
  • Confronta il protectionLevel in /etc/permissions/ sul dispositivo
  • Se il valore è normal — concede automaticamente l’accesso
  • L’autorizzazione rimane attiva fino alla completa disinstallazione dell’applicazione

L’utente non può revocare un’autorizzazione normale tramite l’interfaccia. Nelle impostazioni delle applicazioni, nella sezione Autorizzazioni, vengono mostrate solo le autorizzazioni pericolose. Ciò contrasta con iOS, dove ogni autorizzazione richiede una conferma separata indipendentemente dal livello di sensibilità della funzione.

Normal Permission vs Dangerous Permission

Normal e Dangerous Permission sono due categorie opposte di protezione in Android. La differenza principale è nel metodo di concessione: le normali vengono concesse automaticamente all’installazione, le pericolose richiedono un consenso esplicito tramite un dialogo runtime. Questa distinzione è integrata nell’architettura di sicurezza di Android a partire dalla versione 6.0 Marshmallow.

Confronto delle caratteristiche chiave:

CaratteristicaNormal PermissionDangerous Permission
ProtectionLevelnormaldangerous
Richiesta all’utenteNon richiestaDialogo runtime obbligatorio
Possibilità di revocaNo, solo disinstallazione appSì, tramite impostazioni in qualsiasi momento
Verifica nel codiceSempre PERMISSION_GRANTEDcheckSelfPermission obbligatorio
EsempiINTERNET, VIBRATE, ACCESS_NETWORK_STATECAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION

Differenza nella richiesta all’utente

L’utente non vede alcun dialogo durante la richiesta di Normal Permission. Se un’app necessita di INTERNET — lo ottiene silenziosamente. Per Dangerous Permission, il sistema mostra un dialogo modale che descrive l’accesso richiesto. L’utente preme Consenti o Nega, e successivamente può revocare l’autorizzazione in qualsiasi momento tramite Impostazioni. Questa è una differenza UX chiave che determina la strategia di sviluppo dell’interfaccia.

Quando scegliere Normal

Normal dovrebbe essere usato in tutti i casi in cui l’accesso non riguarda dati sensibili. ACCESS_NETWORK_STATE per verificare la connettività, VIBRATE per il feedback aptico, INTERNET per le richieste HTTP — queste sono tutte autorizzazioni normali. Usare il livello dangerous dove normale è sufficiente è una cattiva pratica, creando dialoghi non necessari e riducendo la fiducia dell’utente nell’applicazione.

Elenco delle autorizzazioni normali in Android

Android definisce diverse decine di autorizzazioni normali, ciascuna corrispondente a una specifica funzione di sistema. Tutte sono disponibili tramite le costanti della classe Manifest.permission. Di seguito è riportato un elenco delle più comunemente utilizzate nello sviluppo di applicazioni.

CostanteAccessoDescrizione
INTERNETReteApertura di socket di rete per richieste HTTP
ACCESS_NETWORK_STATEReteOttenimento di informazioni sullo stato della rete
ACCESS_WIFI_STATEWi-FiLettura di informazioni sulle connessioni Wi-Fi
VIBRATEVibrazioneControllo del vibratore del dispositivo
BLUETOOTHBluetoothConnessione a dispositivi Bluetooth
WAKE_LOCKAlimentazioneImpedire al processore di entrare in sospensione
SET_ALARMSvegliaImpostazione di una sveglia tramite AlarmManager
CHANGE_NETWORK_STATEReteModifica dello stato della connessione di rete

Gruppi di autorizzazioni normali

Le autorizzazioni normali non sono raggruppate in Permission Group per scopi di visualizzazione nell’interfaccia. I gruppi in Android sono destinati alla schermata delle impostazioni, dove vengono mostrate solo le autorizzazioni pericolose. Tuttavia, le autorizzazioni normali possono essere logicamente suddivise in categorie: rete (INTERNET, ACCESS_NETWORK_STATE), hardware (VIBRATE, WAKE_LOCK), sistema (SET_ALARM) e autorizzazioni Bluetooth.

Alcune costanti di Manifest.permission possono cambiare il loro livello di protezione su diverse versioni di Android. Ad esempio, BLUETOOTH_CONNECT su Android 12+ è diventata un’autorizzazione pericolosa con richiesta runtime, mentre su versioni più vecchie era normale. Si consiglia agli sviluppatori di verificare il protectionLevel corrente per l’API target tramite la documentazione.

Verifica di Normal Permission tramite PackageManager

Uno sviluppatore può verificare programmaticamente se un’autorizzazione è normale tramite PackageManager. Il metodo getPermissionInfo restituisce PermissionInfo il cui campo protectionLevel contiene il flag PermissionInfo.PROTECTION_NORMAL. Ciò è utile per la gestione dinamica e il debugging.

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

Come dichiarare Normal Permission nel manifest

Dichiarare Normal Permission in AndroidManifest.xml è l’operazione più semplice, che richiede un solo tag uses-permission. Non è necessaria alcuna configurazione aggiuntiva di protectionLevel, poiché il livello di protezione è determinato dalla definizione di sistema, non dal manifest dell’applicazione. Lo sviluppatore specifica semplicemente il nome completo della costante.

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

Il sistema elabora tutte le dichiarazioni all’installazione. Se almeno una delle autorizzazioni dichiarate ha un protectionLevel diverso da normal, sarà necessaria una richiesta runtime. INTERNET è l’autorizzazione normale più popolare, presente nella maggior parte delle applicazioni Android, specialmente quelle che effettuano richieste HTTP o caricano contenuti dalla rete.

Esempio di manifest completo

Un esempio completo di AndroidManifest.xml con autorizzazioni normali e pericolose dimostra la differenza: sintatticamente i tag uses-permission sono identici, ma in fase di esecuzione INTERNET e VIBRATE verranno concessi automaticamente, mentre CAMERA richiederà un dialogo.

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 e Normal Permission

Quando si utilizzano librerie — Google Play Services, Firebase, Glide — queste possono aggiungere i propri uses-permission al manifest finale tramite Manifest Merger. Alcune sono normali (INTERNET per Firebase), altre pericolose (ACCESS_FINE_LOCATION per Google Maps). Lo sviluppatore dovrebbe verificare il manifest unito finale in build/outputs/logs/manifest-merger-report.txt prima della pubblicazione.

Limitazioni di Normal Permission

Normal Permission ha due limitazioni fondamentali: l’impossibilità di revoca da parte dell’utente e l’assenza di un’interfaccia di gestione. Se l’utente non si fida dell’applicazione ma l’autorizzazione normale è già stata concessa automaticamente — l’unica soluzione è disinstallare l’applicazione. Ciò crea un certo rischio, poiché le autorizzazioni normali non possono essere bloccate con i mezzi standard di Android.

Una limitazione aggiuntiva si manifesta sui dispositivi con più profili (Work Profile, Multiple Users). Normal Permission viene concessa a tutti i profili contemporaneamente — l’applicazione non può limitare l’autorizzazione a uno solo. Negli scenari aziendali, ciò viene risolto tramite Managed Configurations.

Non è possibile verificare se un’applicazione sta utilizzando una Normal Permission in un dato momento. Il metodo di sistema checkSelfPermission funziona solo per le autorizzazioni pericolose. Per quelle normali restituisce sempre PERMISSION_GRANTED, che non riflette l’attività reale. Ciò dovrebbe essere considerato durante gli audit di sicurezza e l’analisi del comportamento dell’applicazione.

Vale anche la pena ricordare che alcuni produttori di dispositivi (Xiaomi, Huawei, Samsung) modificano il comportamento standard delle autorizzazioni. Sul loro firmware, Normal Permission potrebbe richiedere autorizzazioni aggiuntive nell’interfaccia proprietaria MIUI o EMUI. Si consiglia agli sviluppatori di testare su dispositivi reali di diversi produttori.

Domande frequenti

In cosa differisce Normal Permission da Dangerous?

Normal Permission viene concessa automaticamente all’installazione senza dialogo. Dangerous richiede una richiesta runtime con il consenso esplicito dell’utente e può essere revocata tramite impostazioni. Normal utilizza ProtectionLevel normal, Dangerous protectionLevel dangerous.

Devo scrivere codice per Normal Permission?

No, per le autorizzazioni normali è sufficiente dichiarare uses-permission in AndroidManifest.xml. Non è richiesto codice di richiesta — il sistema concede l’accesso automaticamente. Questo le distingue da quelle pericolose, dove è necessario ActivityCompat.requestPermissions.

Quali Normal Permission sono le più popolari?

Le più utilizzate: INTERNET (richieste di rete), ACCESS_NETWORK_STATE (verifica connettività), VIBRATE (feedback aptico) e WAKE_LOCK (mantenere il processore attivo). Praticamente ogni applicazione Android utilizza almeno INTERNET.

Si può revocare Normal Permission?

No, Normal Permission non può essere revocata tramite le impostazioni dell’applicazione. L’unico modo per interrompere l’accesso è disinstallare l’applicazione. Questa è una differenza chiave rispetto alle autorizzazioni pericolose, che l’utente può disabilitare in qualsiasi momento.

Come verificare il ProtectionLevel di un’autorizzazione?

Utilizza PackageManager.getPermissionInfo, passando il nome dell’autorizzazione come stringa. Il metodo restituisce PermissionInfo con un campo protectionLevel. Confrontalo con le costanti PermissionInfo.PROTECTION_NORMAL o PROTECTION_DANGEROUS per determinare la categoria.

Riepilogo

  • Normal Permission è una categoria di autorizzazioni Android con ProtectionLevel normal, concesse automaticamente all’installazione.
  • Per dichiararla, basta il tag uses-permission in AndroidManifest.xml senza codice runtime.
  • Differiscono da quelle pericolose per l’assenza di dialogo, l’impossibilità di revoca e il basso livello di rischio.
  • Le più popolari: INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE e WAKE_LOCK.
  • Il ProtectionLevel viene verificato tramite PackageManager.getPermissionInfo nel codice.
  • Le autorizzazioni normali non vengono visualizzate nella schermata delle impostazioni dell’applicazione.
  • Quando si utilizzano librerie, verificare il manifest finale tramite Manifest Merger.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche