Flutter-geolocator: Android Pie (API 28) Geolocator().getCurrentPosition() tidak kembali

Dibuat pada 2 Nov 2018  ·  39Komentar  ·  Sumber: Baseflow/flutter-geolocator

Laporan Bug

Ketika saya menjalankan Geolocator().getCurrentPosition() di Android Emulator dengan Android Pie (API 28) panggilan tidak kembali sama sekali.

Saya menjalankan kode yang sama pada lokasi API 27 kembali dengan baik. Saya mencoba membuat emulator baru, tidak ada perubahan.

Konfigurasi

Emulator Android dengan Android Pie (API 28)

Versi: 2.1.0

Platform:

  • [ ] :iphone: iOS
  • [X ] :robot: Android
android

Komentar yang paling membantu

Saya memiliki masalah yang sama dan saya mengatur batas waktu agar berfungsi. Ketika batas waktu terjadi, saya memanggil getLastKnownPosition()

Geolocator().getCurrentPosition().timeout(Duration(seconds: 10)).then((position) {
      //getting position without problems
      print(position);
    }).catchError((error) {
      if (error is TimeoutException) {
        Geolocator().getLastKnownPosition().then((position) {
          //getting last known position
          print(position);
        }).catchError((error) {
          //handle the exception
        });
      } else {
        //handle the exception
      }
    });

Anda juga bisa melakukan hal yang sama dengan streaming

Semua 39 komentar

saya juga, ada apa? :(

Sama disini!

@savjolovs jika saya men-debug, debugger berhenti di Geolocator().getCurrentPosition(). Breakpoints setelah mehtod tidak terkena. Bisakah Anda mengkonfirmasi perilaku ini?

Perilaku yang sama di sini sampai Dorong beberapa koordinat menggunakan kontrol yang diperluas.
Perilaku yang sama dengan salah satu dari dua perangkat fisik. Pertama dengan android 5 - berfungsi dengan baik, yang lain dengan 6 - tidak ada respons hingga lokasi fakegps diaktifkan.

+1 di sini

Ada yang tahu apa penyebabnya? Fitur ini merusak segalanya, apakah ada yang mencoba plugin lain?

Memeriksa yang jelas, bagi mereka yang bermasalah, apakah Anda memiliki sinyal gps untuk mendapatkan lokasi dan telah pindah? Hanya ingin tahu apakah itu duduk di sana menunggu beberapa lokasi baru sebelum diperbarui?

@ibrierley sepertinya tidak bisa mendapatkan sinyal GPS dengan atau tanpa bergerak, tetapi pada saat yang sama aplikasi yang berbeda seperti peta google tidak memiliki masalah untuk menemukan posisi saat ini. lastKnownPosition mengembalikan lokasi sekitar beberapa ratus meter jauhnya. Dengan android 5 tidak ada masalah sama sekali, bahkan tidak meminta izin lokasi (tapi tidak yakin, mungkin saya melewatkan ini saat debug)

Masalah yang sama di Android oreo kecuali Anda menutup dan membuka aplikasi lagi

Saya telah mengutak-atik jam tangan Android Wear dan memiliki banyak masalah dengan GPS, tetapi tampaknya sebagian besar berfungsi (waktunya dapat habis setelah waktu yang lama, tetapi saya pikir itu masalah yang berbeda).

Saya tidak yakin apa sebenarnya yang membuatnya berfungsi, karena saya sudah mencoba banyak hal, tetapi mungkin seseorang dapat memeriksanya dan melihat apakah mereka membantu.

0) Pastikan perangkat Anda bisa mendapatkan sinyal GPS, jadi di luar atau berikan lokasi melalui emulator (saya memberinya rute GPX yang saya unduh untuk menguji).

1) Pastikan layar menyala. GPS dapat berhenti mengembalikan hasil jika dalam mode minimal apa pun namanya. Saya memaksa layar menyala saat dibutuhkan dengan paket Layar dan Screen.keepOn(true); Jika layar mati, tampaknya menahan dan menyangga serangkaian lokasi hingga layar menyala kembali.

2) Ini adalah izin saya di AndroidManifest.xml, mungkin patut dicoba

```




Perhatikan terutama yang terakhir, karena saya pikir ada perubahan di sepanjang jalan dalam satu versi, dan sepertinya membantu. Anda mungkin tidak menginginkan wake_lock karena alasan baterai, tetapi mungkin berguna untuk mencoba ini untuk menghilangkan di mana masalahnya.

3) Saya memiliki keanehan dengan waktu Stream, jadi saya akhirnya memulai streaming dengan geolocator.getPositionStream tetapi tidak benar-benar menggunakannya. Dengan aliran yang berjalan, saya memanggil getCurrentPosition( keinginanAccuracy: LocationAccuracy.high ) berdasarkan pengatur waktu. Saya pikir ini tidak diperlukan sekarang, karena saya pikir masalah awal saya adalah layar mati, tetapi mungkin patut dicoba hanya karena minat.

Jika seseorang mencoba yang di atas dan tidak dapat membuatnya berfungsi, dapatkah Anda membuat aplikasi bergetar minimal, hanya dengan hal-hal lokasi, dan saya akan melihat apakah itu gagal sama dengan milik saya. Jauh lebih menyakitkan untuk pergi dari yang seharusnya :/.

Terima kasih @ibrierley atas informasi Anda, akan mencoba sesegera mungkin dan melaporkan tentang pengalaman saya memecahkan masalah.

Lakukan penelitian hari ini dengan alat tambahan seperti tes GPS pada perangkat fisik.
Jadi tidak ada respon ketika sat tidak tersedia dengan tes GPS (0 terhubung 1 tersedia karena awan dan gedung-gedung besar di sekitar) bahkan google map atau layanan peta lainnya berfungsi.
Tidak ada respons saat sat online tetapi jarak yang ditentukan dalam opsi lokasi, tetapi tidak 100% dalam kasus ini - perlu semacam drift gps untuk memiliki koordinat awal.
Saya melakukan beberapa trik dengan lokasi terakhir yang diketahui untuk memposisikan di sana untuk memulai aplikasi yang membutuhkan lokasi saat ini sebelum data lokasi aktual tersedia.
Mungkin akan menjadi solusi yang bagus untuk memiliki semacam bendera seperti isReady dengan kemungkinan panggilan balik di Geolocator yang menunjukkan bahwa layanan GPS siap menawarkan data lokasi melalui aliran.

Adakah yang mencoba misalnya ini: https://github.com/Lyokone/flutterlocation , atau ini: https://github.com/Lyokone/flutterlocation ? Jadi kami dapat mengecualikan kesalahan yang tidak terkait dengan paket ini.

Saya sudah mencobanya, dan berakhir dengan yang ini (bukan berarti tidak
patut dicoba!). Semuanya memiliki 'beberapa' masalah, saya pikir benar-benar
karena Android memiliki beberapa hal yang tidak jelas.

Biasanya saya menemukan ketika lokasi tidak dikembalikan pada salah satu dari
paket), itu karena masalah non-flutter (misalnya gps telah masuk ke
mode tidur, atau tidak ada sinyal gps).

Pada Kam, 15 Nov 2018 jam 19:26 HerrNiklasRaab [email protected]
menulis:

Adakah yang mencoba misalnya ini:
https://github.com/Lyokone/flutterlocation , atau ini:
https://github.com/Lyokone/flutterlocation ? Jadi kita bisa mengecualikan kesalahan itu
tidak terkait dengan paket ini.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/BaseflowIT/flutter-geolocator/issues/135#issuecomment-439160446 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ADuG9WRbZuJYvi5N_2xrrku-Jurk6trIks5uvb_SgaJpZM4YKDSm
.

Ada yang coba punya saya?
flutter_background_geolocation

Apakah itu bekerja dengan layar mati karena minat?

Pada Thu, Nov 15, 2018 at 08:16 Chris Scott [email protected]
menulis:

Ada yang coba punya saya?
flutter_background_geolocation
https://pub.dartlang.org/packages/flutter_background_geolocation#-readme-tab-


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/BaseflowIT/flutter-geolocator/issues/135#issuecomment-439175841 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ADuG9f5uvZK0lDnYecMoFZhJnF0ylz6Pks5uvcuygaJpZM4YKDSm
.

Ini berfungsi bahkan jika Anda menghentikan aplikasi Anda ( stopOnTerminate: false ) atau mem-boot ulang perangkat ( startOnBoot: true ).

Saya menghadapi masalah yang sama, yang tidak pernah kembali dari getCurrentPosition .
Saya memiliki kode berikut:
position = await Geolocator() .getCurrentPosition(desiredAccuracy: LocationAccuracy.best); setState(() { _position = position; }); if (position == null) Fluttertoast.showToast( msg: 'Position is null', toastLength: Toast.LENGTH_SHORT); else Fluttertoast.showToast( msg: 'Got Position', toastLength: Toast.LENGTH_SHORT);

Izin tersebut adalah:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.hardware.location.gps" /> <uses-permission android:name="android.hardware.location.network" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> .
Saat saya menjalankan program, indikator lokasi muncul di bagian atas layar dan tetap diam sampai saya menutup program.
Ada bantuan, tolong?

Hal yang sama terjadi, getCurrentPosition tidak berfungsi menggunakan API 23.
Adakah solusi untuk ini atau paket alternatif apa pun yang berfungsi untuk mendapatkan posisi saat ini?

Ini agak rumit. Saya dapat membuatnya berfungsi sekarang dengan meluncurkan aplikasi Google Map terlebih dahulu dan membiarkannya meminta izin untuk mengaktifkan GPS saat mengetuk lokasi saya. Setelah getCurrentPosition itu tiba-tiba bekerja seperti pesona.

Dalam kasus saya, saya tidak dapat mengambil lokasi dengan API apa pun, Tidak yakin apakah ini dapat menyelesaikan masalah Anda, tetapi
Saya mencoba menghapus operator NOT di sini, menambahkan pernyataan return dan berhasil. https://github.com/BaseflowIT/flutter-geolocator/blob/master/android/src/main/Java/com/baseflow/flutter/plugin/geolocator/tasks/LocationUpdatesUsingLocationManagerTask.java#L52

// If we are listening to multiple location updates we can go ahead
// and report back the last known location (if we have one).
if(mStopAfterFirstLocationUpdate && mBestLocation != null) {
reportLocationUpdate(mBestLocation);
return;
}

Saya baru saja menemukan ini karena saya perlu mendapatkan perbaikan yang sangat cepat setelah saya menggunakan plugin lain yang mengecewakan saya dalam produksi. Saya dapat mengonfirmasi bahwa saya telah menguji ini pada API 23 (perangkat fisik), API 24 (perangkat fisik) dan API 28 (perangkat fisik) dan tidak memiliki masalah dengannya. Pada API 23 saya ditanya apakah saya ingin membantu Google meningkatkan lokasi, dll, dll. Dan hanya menjawab ya, itu memuat lokasi setelah sekitar 20 detik atau lebih. Di masa lalu, saya punya masalah nyata mendapatkan emulator untuk mengembalikan lokasi (pengembangan Android asli), jadi mungkinkah itu hanya masalah emulator?

Saya memiliki masalah yang sama dan saya mengatur batas waktu agar berfungsi. Ketika batas waktu terjadi, saya memanggil getLastKnownPosition()

Geolocator().getCurrentPosition().timeout(Duration(seconds: 10)).then((position) {
      //getting position without problems
      print(position);
    }).catchError((error) {
      if (error is TimeoutException) {
        Geolocator().getLastKnownPosition().then((position) {
          //getting last known position
          print(position);
        }).catchError((error) {
          //handle the exception
        });
      } else {
        //handle the exception
      }
    });

Anda juga bisa melakukan hal yang sama dengan streaming

@NMateu Terima kasih atas kontribusi Anda. Itu sangat membantu!

Saya memiliki masalah yang sama pada emulator, tetapi .forceAndroidLocationManager = true; memperbaikinya untuk saya. Tampaknya manajer lokasi yang menyatu terkadang menghalangi.

ada berita tentang ini?

Apakah ada yang berhasil memecahkan masalah? Saya benar-benar harus menyelesaikan ini, teman-teman!

Masalah yang sama, ini berfungsi dengan baik di perangkat ios, tetapi tidak bisa mendapatkan lokasi di android hari ini.

ya, saya sebenarnya bisa mendapatkan alamat dengan metode penempatan placemarkFromAddress . Tapi lokasinya sendiri rusak.

masalah yang sama di sini

void _getUserLocation() async {
Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
GeolocationStatus geolocationStatus = menunggu geolocator.checkGeolocationPermissionStatus();
Posisi posisi = menunggu Geolocator()
.getCurrentPosition(Akurasi yang diinginkan: LocationAccuracy.high);
Daftartanda letak = menunggu Geolocator()
.placemarkFromCoordinates(position.latitude, position.longitude);
mencetak("-----------------");
print(tanda letak[0].posisi);
print(geolocator.toString());
print(geolocationStatus.toString());
keadaan set(() {
_initialPosition = LatLng(posisi.lintang, posisi.bujur);

  locationController.text = placemark[0].name;
});

}

itu menunjukkan lokasi yang salah.

I/flutter ( 7363): Lat: 37.4219999899999996, Panjang: -122.08405750000001
I/flutter ( 7363): Instance 'Geolocator'
I/flutter ( 7363): GeolocationStatus.diberikan

void _getUserLocation() async {
Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
GeolocationStatus geolocationStatus = menunggu geolocator.checkGeolocationPermissionStatus();
Posisi posisi = menunggu Geolocator()
.getCurrentPosition(Akurasi yang diinginkan: LocationAccuracy.high);
Daftar tanda letak = menunggu Geolocator()
.placemarkFromCoordinates(position.latitude, position.longitude);
mencetak("-----------------");
print(tanda letak[0].posisi);
print(geolocator.toString());
print(geolocationStatus.toString());
keadaan set(() {
_initialPosition = LatLng(posisi.lintang, posisi.bujur);

  locationController.text = placemark[0].name;
});

}

Bekerja pada emulator dengan cuplikan ini
Geolocator()..forceAndroidLocationManager = true;

Paket ini bekerja seperti pesona untuk semuanya

(https://github.com/alfanhui/new_geolocation)

Saya menghadapi masalah yang sama dengan beberapa perangkat Android. Tapi saya telah menemukan solusi untuk itu -

Yang perlu Anda lakukan adalah mengatur nilai Geolocator()..forceAndroidLocationManager = true.

geolocator geolocator akhir = Geolocator()..forceAndroidLocationManager = true;

Diselesaikan dalam versi 6.0.0

Posisi posisi = menunggu Geolocator.getCurrentPosition(
Akurasi yang diinginkan: LocationAccuracy.low,forceAndroidLocationManager: true);
Itu memperbaiki masalah saya

Saya mendapatkan kesalahan pada baris forceAndroidLocationManager yang menunjukkan garis merah dan kesalahannya adalah ....."Penyetel 'forceAndroidLocationManager' tidak ditentukan untuk jenis 'Geolocator'.
Coba impor pustaka yang mendefinisikan 'forceAndroidLocationManager', koreksi nama menjadi nama penyetel yang ada, atau tentukan penyetel atau bidang bernama 'forceAndroidLocationManager'.".........ada yang bisa membantu saya dengan ini

@aditikumar-png versi geolocator mana yang Anda gunakan? Anda mungkin memperbarui ke versi 6.x baru-baru ini. Versi ini memiliki perubahan yang melanggar. Kami memindahkan properti Geolocator().forceAndroidLocationManager ke parameter bernama pada metode getCurrentPosition dan getPositionStream .

Ini berarti Anda sekarang dapat menggunakan geolocator seperti ini:

final position = await Geolocator.getCurrentPosition(forceAndroidLocationManager: true);

bukannya yang lama:

final geolocator = Geolocator();
geolocator.forceAndroidLocationManager = true;

final position = await geolocator.getCurrentPosition();

@aditikumar-png versi geolocator mana yang Anda gunakan? Anda mungkin memperbarui ke versi 6.x baru-baru ini. Versi ini memiliki perubahan yang melanggar. Kami memindahkan properti Geolocator().forceAndroidLocationManager ke parameter bernama pada metode getCurrentPosition dan getPositionStream .

Ini berarti Anda sekarang dapat menggunakan geolocator seperti ini:

final position = await Geolocator.getCurrentPosition(forceAndroidLocationManager: true);

bukannya yang lama:

final geolocator = Geolocator();
geolocator.forceAndroidLocationManager = true;

final position = await geolocator.getCurrentPosition();

Terima kasih banyak!!!!! Anda memecahkan masalah saya dalam hitungan detik saya berjuang dengan ini sejak 9 jam

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

shrishti08 picture shrishti08  ·  3Komentar

deisold picture deisold  ·  3Komentar

devalp-pro picture devalp-pro  ·  3Komentar

DineshKachhot picture DineshKachhot  ·  7Komentar

jaumard picture jaumard  ·  3Komentar