Camera Permission — detta är den behörighet som en mobilapp begär från användaren för att få åtkomst till enhetens kamera. Utan den kan appen inte ta bilder, skanna QR-koder eller starta videosamtal. Enligt uppgifter från Android Developers, 2024, måste alla appar som använder kameran på Android 6.0 och senare begära behörighet under körning via en systemdialogruta.
Huvudpunkter
Camera Permission — detta är en systembehörighet som reglerar appars åtkomst till den mobila enhetens kamera. Mobila plattformar betraktar kameran som en konfidentiell resurs eftersom den möjliggör videoinspelning och fotografering av användarens omgivning i realtid.
På Android tillhör CAMERA-behörigheten kategorin farliga behörigheter (dangerous permissions) och kräver en obligatorisk begäran under körning. På iOS är tillägget av nyckeln NSCameraUsageDescription i Info.plist ett obligatoriskt villkor för alla appar som får åtkomst till kameran. Utan denna nyckel kraschar appen vid försök att öppna kameran.
Enligt forskning från Statista (2024) använder cirka 68% av mobilapparna i topp-100 på App Store kameran i någon form: från skanning av QR-koder till fullständig fotografering och videoinspelning. Samtidigt nekar 37% av användarna åtkomst till kameran om de inte förstår varför appen behöver denna behörighet.
Camera Permission på Android begärs genom en deklaration i manifestet och en efterföljande begäran under körning. Från och med Android 6.0 kan CAMERA-behörigheten inte erhållas endast i installationsfasen — användaren måste uttryckligen bekräfta åtkomst.
För att använda kameran på Android måste du lägga till motsvarande deklaration i manifestfilen. Utan detta tillåter systemet inte appen att öppna kameran även med en begäran under körning.
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
Attributet android:required=false för uses-feature gör det möjligt att installera appen på enheter utan kamera. Detta är viktigt om kameran inte är en obligatorisk komponent för hela appens funktion.
Begäran om Camera Permission utförs via Activity Result API. Efter att ha fått svaret kontrollerar appen statusen och startar kameran eller visar en förklaring.
private val cameraLauncher =
registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
if (success) {
// Foto sparat
showPhoto(photoUri)
}
}
private val permissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
openCamera()
} else {
showPermissionDenied()
}
}
fun capturePhoto() {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
openCamera()
} else {
permissionLauncher.launch(Manifest.permission.CAMERA)
}
}
Från och med Android 11, om användaren har nekat åtkomst till kameran två gånger, visas inte systemdialogrutan längre. Flaggan Never Ask Again ställs in automatiskt och appen kan endast omdirigera användaren till systeminställningarna via Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS). Utvecklaren bör förutse kontroll av shouldShowRequestPermissionRationale för att visa en förberedande skärm i tid.
Camera Permission på iOS hanteras via nyckeln NSCameraUsageDescription i Info.plist och anropet AVCaptureDevice.requestAccess. Apple kontrollerar strikt befogenheten för begäran: om appen använder kameran på ett sätt som inte är uppenbart för användaren kan App Store avvisa appen.
Ett obligatoriskt villkor för åtkomst till kameran på iOS är att lägga till nyckeln NSCameraUsageDescription i filen Info.plist. Strängvärdet kommer att visas i systemdialogrutan som orsak till begäran.
<key>NSCameraUsageDescription</key>
<string>Appen behöver åtkomst till kameran för att ta profilbilder och skanna QR-koder.</string>
I Swift utförs begäran via den statiska metoden AVCaptureDevice.requestAccess. Efter att ha fått svaret bearbetar appen statusen och startar inspelningssessionen.
import AVFoundation
func requestCameraAccess() {
AVCaptureDevice.requestAccess(for: .video) { granted in
DispatchQueue.main.async {
if granted {
self.setupCameraSession()
} else {
self.showSettingsAlert()
}
}
}
}
private func setupCameraSession() {
guard let device = AVCaptureDevice.default(.for: .video)
else { return }
do {
let input = try AVCaptureDeviceInput(device: device)
let session = AVCaptureSession()
session.addInput(input)
session.startRunning()
} catch {
print("Camera error: \(error)")
}
}
Innan du begär åtkomst till kameran rekommenderas det att kontrollera den aktuella auktoriseringsstatusen via AVCaptureDevice.authorizationStatus(for: .video). Detta gör det möjligt att undvika onödiga anrop av systemdialogrutan och korrekt hantera fall där användaren redan har fattat ett beslut. Statusen kan vara .notDetermined, .restricted, .denied eller .authorized.
Camera Permission tillämpas i olika scenarier, från enkel skanning till fullständig videoinspelning. Varje scenario har sina egna krav på implementering och hantering av behörigheter.
På iOS används AVCaptureMetadataOutput från AVFoundation-ramverket för att skanna QR-koder, vilket kräver Camera Permission. På Android rekommenderas det att använda ML Kit Barcode Scanning från Google. Det är viktigt att notera att för skanning av QR-koder används själva kameran, inte ett bildanalysbibliotek — därför är Camera Permission obligatoriskt.
Standard fotografering eller videoinspelning kräver Camera Permission både på iOS och Android. På Android kan du använda Intent(MediaStore.ACTION_IMAGE_CAPTURE), som öppnar systemets kameraapp — i detta fall begärs behörigheten av systemappen, inte din. För förhandsvisning av kameran inuti appen (CameraX, Camera2 API) krävs dock egen behörighet.
Appar för videosamtal (Zoom, Google Meet) och förstärkt verklighet (ARCore, ARKit) begär Camera Permission för att fånga video från den främre eller bakre kameran. I detta fall bör begäran förklaras särskilt noggrant, eftersom användaren kanske inte förväntar sig att en app för AR-provning av möbler begär kameran.
När du arbetar med kameran på iOS kan du konfigurera inspelningsparametrar via AVCaptureDeviceInput och AVCapturePhotoOutput. På Android förenklar CameraX konfigurationen via återanropen ImageCapture, VideoCapture och Preview. För varje konfiguration måste önskad upplösning, zoomnivå och fokusläge anges. Valet av rätt inspelningskonfiguration påverkar direkt appens prestanda och batteriförbrukning.
Vid arbete med kameran kan olika fel uppstå. Kameran kan vara upptagen av en annan app, inaktiverad i systemets sekretessinställningar eller saknas på enheten. På Android rekommenderas hantering av CameraAccessException vid anrop av CameraManager.openCamera. På iOS bör AVCaptureDevice.authorizationStatus kontrolleras och vägran hanteras korrekt genom att erbjuda användaren att gå till inställningarna för att aktivera åtkomst. Kontrollera alltid förekomsten av kamera på enheten innan du begär behörighet med PackageManager.hasSystemFeature. En sådan kontroll förhindrar onödiga begäranden på enheter utan kamera och förbättrar användarupplevelsen.
Prestandaoptimering vid arbete med kameran är viktig för en smidig app. Videoinspelning i hög upplösning förbrukar betydande processor- och batteriresurser.
På iOS, använd AVCaptureSessionPresetMedium istället för maximal upplösning om appen inte kräver 4K-inspelning. På Android gör CameraX det möjligt att konfigurera ImageCapture med målupplösning via ImageCaptureConfig.Builder. Det är också viktigt att frigöra kameran när appen går i bakgrunden och återerövra den vid återkomst. Detta är en standardpraxis som rekommenderas av Google och Apple för att spara batteri.
Bästa praxis hjälper till att öka godkännandefrekvensen för Camera Permission och undvika att appen avvisas av App Store eller Google Play.
Innan du anropar systemdialogrutan, visa en skärm med ett exempel på hur kameran kommer att användas: en bild av skanningsgränssnittet, en ram för profilbilden, ett exempel på en igenkänd QR-kod. Visuell förklaring fungerar bättre än textbaserad förklaring. Enligt uppgifter från UX Movement (2024) ökar tillägget av en visuell förhandsvisning godkännandefrekvensen till 72%.
Begär aldrig Camera Permission vid första starten av appen. En användare som precis har öppnat appen är mer benägen att neka om hen inte förstår kontexten. Begär åtkomst strikt i det ögonblick när användaren trycker på en knapp som kräver kameran: "Ta profilbild", "Skanna kod", "Starta videosamtal". Kontextuell trigger ökar meningsfullheten i begäran.
Om användaren har nekat Camera Permission, erbjud ett alternativt sätt att utföra åtgärden: välj ett foto från galleriet, manuell inmatning av QR-koddata, ladda upp en bild från enheten. Vägran bör inte helt blockera appens funktionalitet — detta är ett krav från Google Play och App Stores rekommendationer för appdesign.
Vanliga frågor
Vid försök att öppna kameran utan behörighet får du ett fel. Det är nödvändigt att i förväg kontrollera statusen via checkSelfPermission på Android eller authorizationStatus på iOS och erbjuda ett alternativt scenario.
Ja, skanning av QR-koder via kameran kräver Camera Permission. Ett alternativt tillvägagångssätt — användning av bibliotek för QR-kodigenkänning från bild utan kamera (till exempel nedladdning av ett foto med kod från galleriet) — men detta kräver Photo Library Permission.
I Jetpack Compose-arkitekturen kan du använda rememberLauncherForActivityResult med ActivityResultContracts.RequestPermission i en composable-funktion. För tjänster utan användargränssnitt är direkt behörighetsbegäran inte möjlig — kontrollen måste överföras till Activity.
Den mest sannolika orsaken är avsaknaden av nyckeln NSCameraUsageDescription i Info.plist. Sedan iOS 10 orsakar varje åtkomst till AVCaptureDevice utan denna nyckel en krasch av appen med undantaget NSInvalidArgumentException.
På Android, återställ appens inställningar via Settings → Apps → [App] → Behörigheter. På iOS, använd Settings → [App] → Camera-omkopplaren. För automatisering av tester på iOS kan du använda XCUITest med resetAuthorizationStatus.
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å