CodeBlanks Logo Icon CodeBlanks

Konum izni

Konum izni istemeyi öğrenirsin.

Konum izni

Konum bilgisine erişmek için kullanıcıdan izin istenir. expo-location paketi Location.requestForegroundPermissionsAsync işlevini sunar. Bu işlev bir nesne döndürür; status alanı 'granted' ise konum 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 konum alınamaz; kullanıcıya neden bilgisini 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 konum gösterimi başlatılır. Bu kalıp, kullanıcıya her durumda anlamlı bir geri bildirim verir. State null iken konum işlevleri çağrılmaz.

Uygulama İzin iste ve state'e yaz

Boş useEffect'i tamamla. const permission = await Location.requestForegroundPermissionsAsync() ç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 Location from 'expo-location';

export function useLocationPermission() {
  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 Location.requestForegroundPermissionsAsync();
  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 Location.____();
Cevap
const permission = await Location.requestForegroundPermissionsAsync();

Açıklama: requestForegroundPermissionsAsync konum izni ister.

2 Hangi alan 'granted' değerini taşır?

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

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

3 State değerini anlama eşle

Kavram Anlamı
null İzin bekleniyor
true Konum alınabilir
false İzin verilmedi
'granted' status değeri

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