CodeBlanks Logo Icon CodeBlanks

Galeri izni

Galeri izni istemeyi öğrenirsin.

Galeri izni

Galeriden görsel seçmek için kullanıcıdan izin istenir. expo-image-picker, requestMediaLibraryPermissionsAsync işlevini sunar. Bu işlev bir nesne döndürür; status alanı 'granted' ise galeri 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 galeri seçim düğmesi devre dışı kalır.

İ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 galeri düğmesi gösterilir. State null iken düğme devre dışı kalır. Bu kalıp her durumda anlamlı geri bildirim verir.

Uygulama İzin iste ve state'e yaz

Boş useEffect'i tamamla. const permission = await ImagePicker.requestMediaLibraryPermissionsAsync() ç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 * as ImagePicker from 'expo-image-picker';

export function useGalleryPermission() {
  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 ImagePicker.requestMediaLibraryPermissionsAsync();
  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 ImagePicker.____();
Cevap
const permission = await ImagePicker.requestMediaLibraryPermissionsAsync();

Açıklama: requestMediaLibraryPermissionsAsync galeri izni ister.

2 İzin nesnesinin hangi alanı 'granted' kontrol edilir?

App.js
if (permission.??? === 'granted') { ... }
  • granted
  • result
  • allowed
  • status Doğru cevap

Açıklama: status alanı 'granted' değerini taşır.

3 State değerini anlama eşle

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

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