CodeBlanks Logo Icon CodeBlanks

Kamera izni

Kamera izni istemeyi öğrenirsin.

Kamera izni

Kamera kullanmak için kullanıcıdan izin istemek zorundasın. expo-camera paketi Camera.requestCameraPermissionsAsync işlevini sunar. Bu işlev bir nesne döndürür; status alanı 'granted' ise kamera kullanılabilir.

İzin isteğini useEffect içinde yaparsın; sonuç state'e yazılır. State başlangıçta null olur (izin istenmedi), sonra true veya false olur. Bu kalıp, uygulama açılınca otomatik olarak izin isteyen en sağlam yöntemdir. İzin verilmezse kamera yerine bir uyarı metni gösterirsin.

İzin state'i

İzin sonuçunu bir state'te tutarsın: const [hasPermission, setHasPermission] = React.useState(null). Başlangıç değeri null; bu, 'henüz sorulmadı' anlamına gelir. useEffect içinde izni iste, sonuçu setHasPermission(permission.status === 'granted') ile yaz.

Render sırasında üç durum kontrol edilir: null ise 'İzin bekleniyor' metni, false ise 'İzin gerekli' metni, true ise kamera gösterilir. Bu üçlü kontrol, kullanıcıya her durumda anlamlı bir geri bildirim verir. State null iken kamera render edilmez; bu da olası hataları önler.

Uygulama İzin iste ve state'e yaz

Boş useEffect'i tamamla. const permission = await Camera.requestCameraPermissionsAsync() çağır; setHasPermission(permission.status === 'granted') ile sonuçu yaz. useEffect'in ikinci parametresi [] olsun.

Başlangıç kodu

App.js
import React from 'react';
import { Camera } from 'expo-camera';

export function useCameraPermission() {
  const [hasPermission, setHasPermission] = React.useState(null);
  React.useEffect(() => {
    // izin iste ve sonuçu yaz
  }, []);
  return hasPermission;
}

Örnek çözüm

App.js
(async () => {
  const permission = await Camera.requestCameraPermissionsAsync();
  setHasPermission(permission.status === 'granted');
})();

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 İzin işlevini yaz

Soru
const permission = await Camera.____();
Cevap
const permission = await Camera.requestCameraPermissionsAsync();

Açıklama: requestCameraPermissionsAsync izin ister.

2 State değerini anlama eşle

Kavram Anlamı
null İzin bekleniyor
true Kamera kullanılabilir
false İzin verilmedi
'granted' status değeri

3 hasPermission null iken ne gösterilir?

App.js
if (hasPermission === null) { ... }
  • Boş ekran
  • Kamera
  • İzin bekleniyor metni Doğru cevap
  • Çökme hatası

Açıklama: null iken 'İzin bekleniyor' metni gösterilir.

İleri seviye bölümündeki tüm dersler