Normal Permission ist eine Kategorie von Berechtigungen in Android, die das System automatisch ohne Rückfrage beim Benutzer erteilt. Laut Android Developer Documentation, 2024 haben normale Berechtigungen ProtectionLevel normal und benötigen im Gegensatz zu gefährlichen keinen Runtime-Dialog. Sie umfassen den Zugriff auf das Internet, den Netzwerkstatus und die Vibration, ohne Risiken für die sensiblen Daten des Benutzers zu schaffen.
Wichtige Punkte
Normal Permission ist eine Art Systemberechtigung in Android mit ProtectionLevel normal, die einer Anwendung automatisch zum Zeitpunkt der Installation erteilt wird. Der Entwickler muss keinen Code schreiben, um sie anzufordern — es reicht, die Berechtigung in AndroidManifest.xml zu deklarieren. Der Benutzer sieht keine Dialoge und kann eine normale Berechtigung nicht separat widerrufen, sondern nur durch vollständiges Deinstallieren der Anwendung.
Das Android-System stuft normale Berechtigungen als risikoarm ein — sie gewähren keinen Zugriff auf persönliche Daten, Kamera oder Mikrofon. Typische Beispiele: Internetzugriff, Vibrationssteuerung, Auslesen des Wi-Fi-Status. Laut Android Security Model (2024) gehören etwa 40 Prozent aller Systemberechtigungen zur Kategorie normal.
Eine wichtige Eigenschaft — normale Berechtigungen können zur Laufzeit nicht über die Einstellungen widerrufen werden. Wenn der Benutzer den Zugriff verweigern möchte, besteht der einzige Weg darin, die Anwendung zu deinstallieren. Entwickler sollten dies in der Architektur berücksichtigen, aber für Benutzer vereinfacht dieser Ansatz die Interaktion: keine Dialoge beim ersten Start.
Die Unterteilung in normale und gefährliche Berechtigungen erschien in Android 6.0 Marshmallow (API 23). Vor dieser Version wurden alle Berechtigungen bei der Installation angefragt — der Benutzer sah eine einzige Liste und akzeptierte oder lehnte sie als Ganzes ab. Normal Permission behielt dieses Modell für risikoarme Operationen bei, während Dangerous zur Runtime-Anfrage überging. Diese Änderung verbesserte die Benutzererfahrung und erhöhte gleichzeitig die Sicherheit.
Viele Android-System-APIs erfordern eine explizite Deklaration einer normalen Berechtigung, auch wenn der Zugriff automatisch erfolgt. Beispielsweise benötigt die Klasse ConnectivityManager ACCESS_NETWORK_STATE, VibratorService benötigt VIBRATE, WifiManager benötigt ACCESS_WIFI_STATE. Ohne Deklaration des entsprechenden uses-permission führt der Aufruf dieser APIs zu einer SecurityException.
ProtectionLevel normal ist die niedrigste Schutzstufe im Android-Berechtigungssystem. Berechtigungen mit dieser Stufe werden im Manifest deklariert, und das System überprüft die Deklaration bei der Installation und gewährt Zugriff ohne Benutzereingriff. Es werden keine UI-Elemente angezeigt, keine Callbacks aufgerufen.
Der Überprüfungsmechanismus arbeitet auf PackageManager-Ebene. Während der APK-Installation scannt das System alle uses-permission-Tags, bestimmt die Schutzstufe jeder Berechtigung durch Abgleich mit den Systemdefinitionen in den permissions.xml-Dateien und registriert für die normale Stufe einfach den Zugriff. Der Vorgang dauert Millisekunden und erfordert keine Interaktion mit der Benutzeroberfläche.
Der Erteilungsalgorithmus funktioniert wie folgt:
Der Benutzer kann eine normale Berechtigung nicht über die Oberfläche widerrufen. In den Anwendungseinstellungen im Bereich Berechtigungen werden nur gefährliche Berechtigungen angezeigt. Dies steht im Gegensatz zu iOS, wo jede Berechtigung unabhängig vom Sensitivitätsgrad der Funktion eine separate Bestätigung erfordert.
Normal und Dangerous Permission sind zwei gegensätzliche Schutzkategorien in Android. Der Hauptunterschied liegt in der Erteilungsmethode: normale werden automatisch bei der Installation erteilt, gefährliche erfordern eine explizite Zustimmung durch einen Runtime-Dialog. Diese Unterscheidung ist in der Android-Sicherheitsarchitektur ab Version 6.0 Marshmallow verankert.
Vergleich der Hauptmerkmale:
| Merkmal | Normal Permission | Dangerous Permission |
|---|---|---|
| ProtectionLevel | normal | dangerous |
| Benutzeranfrage | Nicht erforderlich | Runtime-Dialog obligatorisch |
| Widerrufbarkeit | Nein, nur durch Deinstallation | Ja, jederzeit über Einstellungen |
| Überprüfung im Code | Immer PERMISSION_GRANTED | checkSelfPermission obligatorisch |
| Beispiele | INTERNET, VIBRATE, ACCESS_NETWORK_STATE | CAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION |
Der Benutzer sieht keine Dialoge bei der Anforderung von Normal Permission. Wenn eine App INTERNET benötigt — erhält sie es stillschweigend. Bei Dangerous Permission zeigt das System einen modalen Dialog mit der Beschreibung des angeforderten Zugriffs. Der Benutzer drückt Erlauben oder Verweigern und kann die Berechtigung später jederzeit über die Einstellungen widerrufen. Dies ist ein entscheidender UX-Unterschied, der die Strategie der Schnittstellenentwicklung bestimmt.
Normal sollte in allen Fällen verwendet werden, in denen der Zugriff keine sensiblen Daten betrifft. ACCESS_NETWORK_STATE zur Überprüfung der Konnektivität, VIBRATE für haptisches Feedback, INTERNET für HTTP-Anfragen — all dies sind normale Berechtigungen. Die Verwendung der gefährlichen Stufe, wo normal ausreicht, ist eine schlechte Praxis, die unnötige Dialoge erzeugt und das Vertrauen des Benutzers in die Anwendung verringert.
Android definiert mehrere Dutzend normaler Berechtigungen, die jeweils einer bestimmten Systemfunktion entsprechen. Alle sind über Konstanten der Klasse Manifest.permission verfügbar. Nachfolgend finden Sie eine Liste der am häufigsten in der Anwendungsentwicklung verwendeten.
| Konstante | Zugriff | Beschreibung |
|---|---|---|
| INTERNET | Netzwerk | Öffnen von Netzwerk-Sockets für HTTP-Anfragen |
| ACCESS_NETWORK_STATE | Netzwerk | Abrufen von Informationen über den Netzwerkstatus |
| ACCESS_WIFI_STATE | Wi-Fi | Auslesen von Informationen über Wi-Fi-Verbindungen |
| VIBRATE | Vibration | Steuerung des Gerätevibrators |
| BLUETOOTH | Bluetooth | Verbindung zu Bluetooth-Geräten |
| WAKE_LOCK | Strom | Verhindern des Prozessor-Schlafmodus |
| SET_ALARM | Wecker | Einstellen eines Alarms über AlarmManager |
| CHANGE_NETWORK_STATE | Netzwerk | Ändern des Netzwerkverbindungsstatus |
Normale Berechtigungen werden für UI-Anzeigezwecke nicht in Permission Groups gruppiert. Gruppen in Android sind für den Einstellungsbildschirm gedacht, wo nur gefährliche Berechtigungen angezeigt werden. Logisch lassen sich normale Berechtigungen jedoch in Kategorien einteilen: Netzwerk (INTERNET, ACCESS_NETWORK_STATE), Hardware (VIBRATE, WAKE_LOCK), System (SET_ALARM) und Bluetooth-Berechtigungen.
Einige Konstanten aus Manifest.permission können auf verschiedenen Android-Versionen ihre Schutzstufe ändern. Beispielsweise wurde BLUETOOTH_CONNECT auf Android 12+ zu einer gefährlichen Berechtigung mit Runtime-Anfrage, während es in älteren Versionen normal war. Entwicklern wird empfohlen, den aktuellen protectionLevel für die Ziel-API über die Dokumentation zu prüfen.
Ein Entwickler kann programmatisch über PackageManager prüfen, ob eine Berechtigung normal ist. Die Methode getPermissionInfo gibt PermissionInfo zurück, dessen protectionLevel-Feld das Flag PermissionInfo.PROTECTION_NORMAL enthält. Dies ist nützlich für die dynamische Handhabung und Fehlersuche.
fun isNormalPermission(permission: String): Boolean {
val pm = packageManager
val info = pm.getPermissionInfo(
permission,
PackageManager.GET_META_DATA
)
return info.protectionLevel ==
PermissionInfo.PROTECTION_NORMAL
}
Normal Permission deklarieren in AndroidManifest.xml ist die einfachste Operation, die nur ein uses-permission-Tag erfordert. Es ist keine zusätzliche protectionLevel-Konfiguration erforderlich, da die Schutzstufe durch die Systemdefinition und nicht durch das Anwendungsmanifest bestimmt wird. Der Entwickler gibt einfach den vollständigen Namen der Konstante an.
<!-- 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" />
Das System verarbeitet alle Deklarationen bei der Installation. Wenn mindestens eine der deklarierten Berechtigungen einen anderen protectionLevel als normal hat, ist eine Runtime-Anfrage erforderlich. INTERNET ist die beliebteste normale Berechtigung, die in den meisten Android-Anwendungen vorhanden ist, insbesondere in solchen, die HTTP-Anfragen stellen oder Inhalte aus dem Netzwerk laden.
Ein vollständiges Beispiel von AndroidManifest.xml mit normalen und gefährlichen Berechtigungen zeigt den Unterschied: syntaktisch sind die uses-permission-Tags gleich, aber zur Laufzeit werden INTERNET und VIBRATE automatisch erteilt, während CAMERA einen Dialog erfordert.
<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>
Bei Verwendung von Bibliotheken — Google Play Services, Firebase, Glide — können diese über den Manifest Merger eigene uses-permission-Einträge zum endgültigen Manifest hinzufügen. Einige sind normal (INTERNET für Firebase), andere gefährlich (ACCESS_FINE_LOCATION für Google Maps). Der Entwickler sollte das endgültige zusammengeführte Manifest in build/outputs/logs/manifest-merger-report.txt vor der Veröffentlichung überprüfen.
Normal Permission hat zwei grundlegende Einschränkungen: die Unmöglichkeit des Widerrufs durch den Benutzer und das Fehlen einer Verwaltungsoberfläche. Wenn der Benutzer der Anwendung nicht vertraut, die normale Berechtigung aber bereits automatisch erteilt wurde — besteht die einzige Lösung darin, die Anwendung zu deinstallieren. Dies birgt ein gewisses Risiko, da normale Berechtigungen mit den standardmäßigen Android-Mitteln nicht blockiert werden können.
Eine zusätzliche Einschränkung zeigt sich auf Geräten mit mehreren Profilen (Work Profile, Multiple Users). Normal Permission wird allen Profilen auf einmal erteilt — die Anwendung kann die Berechtigung nicht auf nur ein Profil beschränken. In Unternehmensszenarien wird dies über Managed Configurations gelöst.
Es ist nicht überprüfbar, ob eine Anwendung zu einem bestimmten Zeitpunkt eine Normal Permission nutzt. Die Systemmethode checkSelfPermission funktioniert nur für gefährliche Berechtigungen. Für normale gibt sie immer PERMISSION_GRANTED zurück, was die tatsächliche Aktivität nicht widerspiegelt. Dies sollte bei Sicherheitsaudits und der Analyse des Anwendungsverhaltens berücksichtigt werden.
Zu beachten ist auch, dass einige Gerätehersteller (Xiaomi, Huawei, Samsung) das Standardverhalten von Berechtigungen modifizieren. Auf deren Firmware kann Normal Permission zusätzliche Berechtigungen in der proprietären MIUI- oder EMUI-Oberfläche erfordern. Entwicklern wird empfohlen, auf realen Geräten verschiedener Anbieter zu testen.
Häufig gestellte Fragen
Normal Permission wird bei der Installation automatisch ohne Dialog erteilt. Dangerous erfordert eine Runtime-Anfrage mit expliziter Zustimmung des Benutzers und kann über die Einstellungen widerrufen werden. Normal verwendet ProtectionLevel normal, Dangerous protectionLevel dangerous.
Nein, für normale Berechtigungen reicht es, uses-permission in AndroidManifest.xml zu deklarieren. Es ist kein Anfragecode erforderlich — das System gewährt den Zugriff automatisch. Dies unterscheidet sie von gefährlichen, wo ActivityCompat.requestPermissions benötigt wird.
Die am häufigsten verwendeten: INTERNET (Netzwerkanfragen), ACCESS_NETWORK_STATE (Konnektivitätsprüfung), VIBRATE (haptisches Feedback) und WAKE_LOCK (Prozessor wach halten). Praktisch jede Android-Anwendung verwendet mindestens INTERNET.
Nein, Normal Permission kann nicht über die Anwendungseinstellungen widerrufen werden. Der einzige Weg, den Zugriff zu beenden, ist die Deinstallation der Anwendung. Dies ist ein wesentlicher Unterschied zu gefährlichen Berechtigungen, die der Benutzer jederzeit deaktivieren kann.
Verwenden Sie PackageManager.getPermissionInfo und übergeben Sie den String-Namen der Berechtigung. Die Methode gibt PermissionInfo mit einem protectionLevel-Feld zurück. Vergleichen Sie es mit den Konstanten PermissionInfo.PROTECTION_NORMAL oder PROTECTION_DANGEROUS, um die Kategorie zu bestimmen.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch