Normal Permission — en kategori av behörigheter i Android som systemet beviljar automatiskt utan att fråga användaren. Enligt Android Developer Documentation, 2024 har normala behörigheter ProtectionLevel normal och kräver ingen runtime-dialog, till skillnad från farliga. De omfattar åtkomst till internet, nätverksstatus och vibration, utan att skapa risk för användarens konfidentiella data.
Huvudpunkter
Normal Permission — en typ av Android-systembehörighet med ProtectionLevel normal, som automatiskt beviljas applikationen vid installationstillfället. Utvecklaren behöver inte skriva kod för förfrågan — det räcker att ange behörigheten i AndroidManifest.xml. Användaren ser inga dialoger och kan inte återkalla normal permission separat, endast genom att ta bort hela applikationen.
Android-systemet klassificerar normala behörigheter som lågrisk — de ger inte åtkomst till personuppgifter, kamera eller mikrofon. Typiska exempel: åtkomst till internet, vibrationskontroll, avläsning av Wi-Fi-status. Enligt Android Security Model (2024) tillhör cirka 40 procent av alla systembehörigheter kategorin normal.
En viktig egenskap — normala behörigheter återkallas inte i runtime via Settings. Om användaren vill förbjuda åtkomst är det enda sättet att ta bort applikationen. Utvecklare bör ta hänsyn till detta i arkitekturen, men för användare förenklar detta tillvägagångssätt interaktionen: inga dialoger vid första starten.
Uppdelningen i normala och farliga behörigheter dök upp i Android 6.0 Marshmallow (API 23). Före denna version begärdes alla behörigheter vid installation — användaren såg en enda lista och accepterade eller avvisade den i sin helhet. Normal Permission behöll denna modell för lågriskoperationer, medan Dangerous övergick till runtime-förfrågan. Denna förändring förbättrade användarupplevelsen och ökade samtidigt säkerheten.
Många Android-system-API:er kräver explicit angivande av normal behörighet, även om åtkomsten är automatisk. Till exempel kräver klassen ConnectivityManager ACCESS_NETWORK_STATE, VibratorService kräver VIBRATE, WifiManager kräver ACCESS_WIFI_STATE. Utan deklaration av motsvarande uses-permission kommer anrop av dessa API:er att leda till SecurityException.
ProtectionLevel normal — den lägsta skyddsnivån i Android Permission System. Behörigheter med denna nivå deklareras i manifestet och systemet kontrollerar deklarationen vid installation, vilket ger åtkomst utan användarens inblandning. Inga UI-element visas, inga callbacks anropas.
Kontrollmekanismen fungerar på PackageManager-nivå. Vid installation av APK:en skannar systemet alla uses-permission-taggar, bestämmer skyddsnivån för varje behörighet genom matchning med systemdefinitioner i permissions.xml-filer och för normal-level registrerar helt enkelt åtkomsten. Processen tar millisekunder och kräver ingen interaktion med användargränssnittet.
Beviljningsalgoritmen ser ut som följer:
Användaren kan inte återkalla normal behörighet via gränssnittet. I applikationsinställningarna under avsnittet Behörigheter visas endast farliga behörigheter. Detta står i kontrast till iOS, där varje behörighet kräver separat bekräftelse oavsett funktionens känslighetsnivå.
Normal och Dangerous Permission — två motsatta skyddskategorier i Android. Huvudskillnaden ligger i beviljningssättet: normala ges automatiskt vid installation, farliga kräver uttryckligt samtycke via runtime-dialog. Denna skillnad är inbyggd i Android-säkerhetsarkitekturen från och med version 6.0 Marshmallow.
Jämförelse av nyckelegenskaper:
| Egenskap | Normal Permission | Dangerous Permission |
|---|---|---|
| ProtectionLevel | normal | dangerous |
| Användarförfrågan | Krävs inte | Runtime-dialog obligatorisk |
| Återkallningsmöjlighet | Nej, endast borttagning av app | Ja, via inställningar när som helst |
| Kontroll i kod | Alltid PERMISSION_GRANTED | checkSelfPermission obligatorisk |
| Exempel | INTERNET, VIBRATE, ACCESS_NETWORK_STATE | CAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION |
Användaren ser inga dialoger vid förfrågan om Normal Permission. Om applikationen behöver INTERNET — får den det tyst. För Dangerous Permission visar systemet en modal dialog med beskrivning av den begärda åtkomsten. Användaren trycker på Allow eller Deny och kan senare återkalla behörigheten när som helst via Settings. Detta är den viktigaste UX-skillnaden som bestämmer strategin för gränssnittsutveckling.
Normal bör användas i alla fall där åtkomsten inte rör känsliga data. ACCESS_NETWORK_STATE för anslutningskontroll, VIBRATE för taktil återkoppling, INTERNET för HTTP-förfrågningar — allt detta är normala behörigheter. Att tillämpa dangerous-nivå där normal är tillräckligt är dålig praxis, skapar onödiga dialoger och minskar användarens förtroende för applikationen.
Android definierar dussintals normala behörigheter, var och en motsvarar en specifik systemfunktion. Alla är tillgängliga via konstanter i klassen Manifest.permission. Nedan finns en lista över de mest använda inom applikationsutveckling.
| Konstant | Åtkomst | Beskrivning |
|---|---|---|
| INTERNET | Nätverk | Öppna nätverksuttag för HTTP-förfrågningar |
| ACCESS_NETWORK_STATE | Nätverk | Hämta information om nätverksstatus |
| ACCESS_WIFI_STATE | Wi-Fi | Läsa information om Wi-Fi-anslutningar |
| VIBRATE | Vibration | Styra enhetens vibrationsmotor |
| BLUETOOTH | Bluetooth | Ansluta till Bluetooth-enheter |
| WAKE_LOCK | Ström | Förhindra processorn från att gå i viloläge |
| SET_ALARM | Alarm | Ställa in alarm via AlarmManager |
| CHANGE_NETWORK_STATE | Nätverk | Ändra status för nätverksanslutning |
Normala behörigheter grupperas inte i Permission Group för visning i UI. Grupper i Android är avsedda för inställningsskärmen, där endast farliga behörigheter visas. Logiskt sett kan normala behörigheter dock delas in i kategorier: nätverk (INTERNET, ACCESS_NETWORK_STATE), hårdvara (VIBRATE, WAKE_LOCK), system (SET_ALARM) och Bluetooth-behörigheter.
Vissa konstanter från Manifest.permission kan ändra skyddsnivå på olika Android-versioner. Till exempel blev BLUETOOTH_CONNECT på Android 12+ en farlig behörighet med runtime-förfrågan, även om den i äldre versioner var normal. Utvecklare rekommenderas att kontrollera aktuell protectionLevel för mål-API:t via dokumentation.
Utvecklaren kan programmatiskt kontrollera om en behörighet är normal via PackageManager. Metoden getPermissionInfo returnerar PermissionInfo vars fält protectionLevel innehåller flaggan PermissionInfo.PROTECTION_NORMAL. Detta är användbart för dynamisk bearbetning och felsökning.
fun isNormalPermission(permission: String): Boolean {
val pm = packageManager
val info = pm.getPermissionInfo(
permission,
PackageManager.GET_META_DATA
)
return info.protectionLevel ==
PermissionInfo.PROTECTION_NORMAL
}
Deklaration av Normal Permission i AndroidManifest.xml är den enklaste operationen som kräver endast en uses-permission-tagg. Ingen ytterligare konfiguration av protectionLevel behövs eftersom skyddsnivån bestäms av systemdefinitionen, inte applikationens manifest. Utvecklaren anger helt enkelt konstantens fullständiga namn.
<!-- 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" />
Systemet vid installation behandlar alla deklarationer. Om minst en av de angivna behörigheterna har en protectionLevel som skiljer sig från normal, kommer en runtime-förfrågan att krävas. INTERNET — den populäraste normala behörigheten, närvarande i de flesta Android-applikationer, särskilt de som utför HTTP-förfrågningar eller laddar innehåll från nätverket.
Ett fullständigt exempel på AndroidManifest.xml med normala och farlig behörighet visar skillnaden: syntaktiskt är uses-permission-taggarna identiska, men vid exekveringsfasen kommer INTERNET och VIBRATE att beviljas automatiskt, medan CAMERA kräver en dialog.
<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>
Vid användning av bibliotek — Google Play Services, Firebase, Glide — kan de lägga till egna uses-permission i det slutliga manifestet via Manifest Merger. Några av dem är normala (INTERNET för Firebase), andra farliga (ACCESS_FINE_LOCATION för Google Maps). Utvecklaren bör kontrollera det slutliga sammanslagna manifestet i build/outputs/logs/manifest-merger-report.txt före publicering.
Normal Permission har två grundläggande begränsningar: omöjlighet för användaren att återkalla och avsaknad av UI för hantering. Om användaren inte litar på applikationen men den normala behörigheten redan har beviljats automatiskt — är enda utvägen att ta bort applikationen. Detta skapar en viss risk eftersom normala behörigheter inte blockeras av Androids standardverktyg.
En ytterligare begränsning uppstår på enheter med flera profiler (Work Profile, Multiple Users). Normal Permission beviljas omedelbart för alla profiler — applikationen kan inte begränsa behörigheten till endast en. I företagsscenarier löses detta via Managed Configurations.
Det går inte att kontrollera om applikationen för närvarande använder Normal Permission. Systemmetoden checkSelfPermission fungerar endast för farliga behörigheter. För normal returnerar den alltid PERMISSION_GRANTED, vilket inte speglar den faktiska aktiviteten. Detta bör beaktas vid säkerhetsgranskning och analys av applikationsbeteende.
Det är också värt att komma ihåg att vissa enhetstillverkare (Xiaomi, Huawei, Samsung) modifierar standardbeteendet för behörigheter. På deras firmware kan Normal Permission kräva ytterligare tillstånd i det egna gränssnittet MIUI eller EMUI. Utvecklare rekommenderas att testa funktionen på verkliga enheter från olika tillverkare.
Vanliga frågor
Normal Permission beviljas automatiskt vid installation utan dialog. Dangerous kräver runtime-förfrågan med uttryckligt samtycke från användaren och kan återkallas via inställningar. Normal använder ProtectionLevel normal, Dangerous — protectionLevel dangerous.
Nej, för normala behörigheter räcker det att deklarera uses-permission i AndroidManifest.xml. Kod för förfrågan krävs inte — systemet beviljar åtkomst automatiskt. Detta skiljer dem från farliga behörigheter där ActivityCompat.requestPermissions behövs.
De mest använda: INTERNET (nätverksförfrågningar), ACCESS_NETWORK_STATE (anslutningskontroll), VIBRATE (taktil återkoppling) och WAKE_LOCK (hålla processorn aktiv). Praktiskt taget varje Android-applikation använder minst INTERNET.
Nej, Normal Permission kan inte återkallas via applikationsinställningar. Det enda sättet att stoppa åtkomst är att ta bort applikationen. Detta är den viktigaste skillnaden från farliga behörigheter som användaren kan stänga av när som helst.
Använd PackageManager.getPermissionInfo och skicka behörighetens namn. Metoden returnerar PermissionInfo med fältet protectionLevel. Jämför med konstanterna PermissionInfo.PROTECTION_NORMAL eller PROTECTION_DANGEROUS för att bestämma kategori.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också