Flutter-geolocator: Android - CheckGeolocationPermissionStatus yang dieksekusi untuk pertama kalinya ditolak

Dibuat pada 9 Jul 2020  ·  3Komentar  ·  Sumber: Baseflow/flutter-geolocator

Di platform Android ketika saya menjalankan Geolocator (). Fungsi CheckGeolocationPermissionStatus() untuk pertama kalinya GeolocationStatus ditolak dan tidak meminta izin kepada pengguna. Tetapi di IOS ketika saya memanggil fungsi yang sama untuk pertama kalinya, GeolocationStatus tidak diketahui oleh karena itu saya tahu saya harus memanggil Geolocator (). GetCurrentPosition () untuk meminta izin kepada pengguna dan mengembalikan lokasi jika izin diberikan.

Apakah ada cara untuk meminta izin pengguna di Android ketika saya memanggil checkGeolocationPermissionStatus untuk pertama kalinya?

di bawah kode saya:

Future<void> getLocation() async {
    try {

      var serviceEnabled = await  Geolocator().isLocationServiceEnabled();

      if (serviceEnabled) {
        var geolocationStatus =
            await Geolocator().checkGeolocationPermissionStatus();

        if (geolocationStatus == GeolocationStatus.granted || geolocationStatus == GeolocationStatus.unknown) {
          position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
          return;
        } 
      }
    } catch (e) {
      print(e);
    }
  }

Semua 3 komentar

Tampaknya pengelola plugin ini, tidak lebih tertarik untuk memelihara atau mendukung komunitasnya, saya melihat banyak masalah tetapi tidak ada solusi yang akurat atau perbaikan bug untuk mereka.

ya kamu benar! Saya melihat masalah lain tidak ada jawaban juga. =/

@azeemgujjar , @CNogueira92 , ini tidak terjadi. Saya sebenarnya bekerja keras pada rilis besar berikutnya tetapi karena sebagian besar proyek OSS saya perlu melakukan ini di waktu luang saya yang saat ini agak terbatas sehingga perhatian saya agak terbelah. Tentu saja saya menyambut kontribusi plugin untuk membantu.

Untuk menjawab pertanyaan Anda @CNogueira92 , Android dan iOS menangani izin sedikit berbeda. Secara default Android memperlakukan izin sebagai "ditolak" (bahkan ketika pengguna tidak secara eksplisit menolaknya). iOS memiliki status khusus untuk situasi di mana izin belum diminta (disebut "Tidak ditentukan", yang kami terjemahkan menjadi "tidak diketahui").

Pada kedua platform boleh saja meminta izin ketika checkGeolocationPermissionStatus mengembalikan denied atau unknown . Jika pengguna telah memilih opsi "Ditolak dan jangan tanya lagi", Geolocator akan melihat ini dan tidak meminta izin.

Sebenarnya Anda bahkan tidak perlu memeriksa izin secara manual karena Geolocator akan melakukannya secara internal. Jadi Anda dapat dengan aman memperbarui kode Anda ke:

Future<void> getLocation() async {
    try {

      var serviceEnabled = await  Geolocator().isLocationServiceEnabled();

      if (serviceEnabled) {
        position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
      } else {
        // TODO: ask the user to enable the location services...   
      }
    } catch (e) {
      print(e);
    }
  }

checkGeolocationPermissionStatus hanyalah metode praktis jika Anda ingin memeriksa izin secara manual dan memberi sinyal kepada pengguna untuk mengambil tindakan. Dalam rilis baru yang saya sebutkan, Anda juga dapat meminta izin secara manual. Jika Anda ingin melakukannya sekarang, Anda perlu melakukan panggilan ke plugin location_permissions yang dikirimkan bersama geolocator. Informasi lebih lanjut tentang plugin location_permissions dapat ditemukan di sini .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat