Normal Permission i Android — vad är det, skyddsnivåer och funktionsprincip

Författare: IT Sectr Publicerad: 2026-05-20 Lästid: 8 min

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 — kategori av Android-behörigheter med ProtectionLevel normal, beviljas automatiskt vid installation.
  • För användning räcker det att lägga till uses-permission i manifestet — dialogen visas inte för användaren.
  • Huvudskillnad från farliga — avsaknad av runtime-förfrågan och omöjlighet att återkalla via inställningar.
  • Listan omfattar INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE och andra systemkonstanter.
  • Skyddsnivån kan kontrolleras via PackageManager.getPermissionInfo i applikationskoden.

Vad är Normal Permission i Android

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.

Kategorins historik

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.

Vilka API:er kräver Normal Permission

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.

Hur fungerar ProtectionLevel normal

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:

  • Systemet läser manifestet vid installationstillfället
  • Matchar protectionLevel i /etc/permissions/ på enheten
  • Vid värdet normal — beviljar automatiskt åtkomst
  • Behörigheten förblir aktiv tills applikationen helt tas bort

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 Permission vs Dangerous Permission

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:

EgenskapNormal PermissionDangerous Permission
ProtectionLevelnormaldangerous
AnvändarförfråganKrävs inteRuntime-dialog obligatorisk
ÅterkallningsmöjlighetNej, endast borttagning av appJa, via inställningar när som helst
Kontroll i kodAlltid PERMISSION_GRANTEDcheckSelfPermission obligatorisk
ExempelINTERNET, VIBRATE, ACCESS_NETWORK_STATECAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION

Skillnad i användarförfrågan

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.

När ska man välja Normal

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.

Lista över normala behörigheter i Android

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ÅtkomstBeskrivning
INTERNETNätverkÖppna nätverksuttag för HTTP-förfrågningar
ACCESS_NETWORK_STATENätverkHämta information om nätverksstatus
ACCESS_WIFI_STATEWi-FiLäsa information om Wi-Fi-anslutningar
VIBRATEVibrationStyra enhetens vibrationsmotor
BLUETOOTHBluetoothAnsluta till Bluetooth-enheter
WAKE_LOCKStrömFörhindra processorn från att gå i viloläge
SET_ALARMAlarmStälla in alarm via AlarmManager
CHANGE_NETWORK_STATENätverkÄndra status för nätverksanslutning

Grupper av normala behörigheter

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.

Kontrollera Normal Permission via PackageManager

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.

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

Deklarera Normal Permission i manifestet

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.

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

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.

Exempel på fullständigt manifest

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.

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

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.

Begränsningar för Normal Permission

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

Hur skiljer sig Normal Permission från Dangerous?

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.

Behöver jag skriva kod för Normal Permission?

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.

Vilka Normal Permission är mest populära?

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.

Kan Normal Permission återkallas?

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.

Hur kontrollerar jag ProtectionLevel för en behörighet?

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

  • Normal Permission — kategori av Android-behörigheter med ProtectionLevel normal, beviljas automatiskt vid installation.
  • För deklaration räcker taggen uses-permission i AndroidManifest.xml utan runtime-kod.
  • De skiljer sig från farliga genom avsaknad av dialog, omöjlighet att återkalla och låg risknivå.
  • Mest populära: INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE och WAKE_LOCK.
  • ProtectionLevel kontrolleras via PackageManager.getPermissionInfo i kod.
  • Normala behörigheter visas inte på applikationens inställningsskärm.
  • Vid användning av bibliotek, kontrollera slutmanifestet via Manifest Merger.

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.

Diskutera projektet

Läs också