Saya telah membuat aplikasi kecil dengan deskripsi langkah demi langkah untuk mendapatkan koordinat GPS lokasi saat ini.
Contoh lengkap kode sumber ada di koordinat Get Current Location, Nama kota - di Android .
Lihat cara kerjanya:
Yang perlu kita lakukan adalah menambahkan izin ini di file manifes:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Dan buat instance LocationManager seperti ini:
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
Periksa apakah GPS diaktifkan atau tidak.
Dan kemudian laksanakan LocationListener dan dapatkan koordinat:
LocationListener locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 5000, 10, locationListener);
Berikut adalah contoh kode untuk melakukannya
/*---------- Listener class to get coordinates ------------- */
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
editLocation.setText("");
pb.setVisibility(View.INVISIBLE);
Toast.makeText(
getBaseContext(),
"Location changed: Lat: " + loc.getLatitude() + " Lng: "
+ loc.getLongitude(), Toast.LENGTH_SHORT).show();
String longitude = "Longitude: " + loc.getLongitude();
Log.v(TAG, longitude);
String latitude = "Latitude: " + loc.getLatitude();
Log.v(TAG, latitude);
/*------- To get city name from coordinates -------- */
String cityName = null;
Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());
List<Address> addresses;
try {
addresses = gcd.getFromLocation(loc.getLatitude(),
loc.getLongitude(), 1);
if (addresses.size() > 0) {
System.out.println(addresses.get(0).getLocality());
cityName = addresses.get(0).getLocality();
}
}
catch (IOException e) {
e.printStackTrace();
}
String s = longitude + "\n" + latitude + "\n\nMy Current City is: "
+ cityName;
editLocation.setText(s);
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
adresses
baris yang dimulai dengancityName =
akan gagal kecuali. Menggunakan kawat gigi akan memperbaikinya.getLastKnownLocation()
ini adalah lokasi yang lebih "basi" - mengapa ini? Apakah panggilangetLastKnownLocation()
tidak mendapatkan GPS terbaru dari GPS ponsel?Berikut ini informasi tambahan untuk jawaban lain.
Sejak Android
Anda dapat mendaftar untuk keduanya dan mulai mengambil acara
onLocationChanged(Location location)
dari dua sekaligus. Sejauh ini bagus. Sekarang pertanyaannya apakah kita memerlukan dua hasil atau kita harus mengambil yang terbaik. Seperti yang saya tahuGPS_PROVIDER
hasilnya lebih akurat daripadaNETWORK_PROVIDER
.Mari kita mendefinisikan
Location
bidang:Sebelum kita mulai mendengarkan perubahan Lokasi, kita akan menerapkan metode berikut. Metode ini mengembalikan lokasi terakhir yang diketahui, antara GPS dan jaringan. Untuk metode ini yang lebih baru adalah yang terbaik.
Setiap kali kami mengambil lokasi baru, kami akan membandingkannya dengan hasil kami sebelumnya.
Saya menambahkan metode baru ke
onLocationChanged
:sumber
private Location currentBestLocation = null;
dan tambahkan metode `makeUseOfNewLocation (location);` ke onLocationChanged (..)Anda dapat menemukan lokasi dengan
GPS_PROVIDER or NETWORK_PROVIDER
.Gambaran umum layanan lokasi di Android.
Berikut adalah salah satu contoh yang mencoba mencari lokasi menggunakan GPS. Jika GPS Anda tidak tersedia maka cobalah menggunakan jaringan untuk menemukan lokasi.
GPSTracker.java
Activity -AndroidGPSTrackingActivity.java
Layout- main.xml
AndroidManifest.xml
sumber
Sudah ada banyak jawaban di sana tetapi saya ingin menunjukkan cara terbaru untuk mendapatkan lokasi menggunakan Google API, sehingga pemrogram baru dapat menggunakan metode baru:
Saya telah menulis tutorial terperinci tentang lokasi saat ini di android di blog saya demonuts.com Anda juga dapat menemukan kode sumber lengkap yang dikembangkan dengan android studio.
Pertama-tama, letakkan ini di file gradle
kemudian mengimplementasikan antarmuka yang diperlukan
nyatakan contoh
letakkan ini
onCreate()
Akhirnya, ganti metode yang diperlukan
Jangan lupa untuk memulai GPS di perangkat Anda sebelum menjalankan aplikasi.
sumber
mLocation
selalu memberi nol. Saya mencoba hal yang sama seperti yang disebutkancompile 'com.google.android.gms:play-services-location:11.0.4'
alih-alih menambahkan semua layanan Google Play ke aplikasi Anda.Karena saya tidak suka beberapa kode di jawaban lain, inilah solusi sederhana saya. Solusi ini dimaksudkan untuk dapat digunakan dalam Kegiatan atau Layanan untuk melacak lokasi. Itu memastikan bahwa itu tidak pernah mengembalikan data yang terlalu basi kecuali Anda secara eksplisit meminta data basi. Itu dapat dijalankan dalam mode panggilan balik untuk mendapatkan pembaruan saat kami menerimanya, atau dalam mode polling untuk polling untuk info terbaru.
Antarmuka LocationTracker generik. Memungkinkan kami memiliki beberapa jenis pelacak lokasi dan memasukkan yang sesuai dengan mudah:
ProviderLocationTracker- kelas ini akan melacak lokasi untuk GPS atau NETWORK.
Ini adalah FallbackLocationTracker, yang akan melacak dengan GPS dan NETWORK, dan menggunakan lokasi apa pun yang lebih akurat.
Karena keduanya mengimplementasikan antarmuka LocationTracker, Anda dapat dengan mudah mengubah pikiran tentang mana yang akan digunakan. Untuk menjalankan kelas dalam mode polling, panggil saja start (). Untuk menjalankannya dalam mode pembaruan, panggil start (Listener).
Lihat juga posting blog saya pada kode
sumber
FallbackLocationTracker fallbackLocationTracker = new FallbackLocationTracker(mContext); fallbackLocationTracker.start(); if (fallbackLocationTracker.hasLocation()) { return fallbackLocationTracker.getLocation(); }
Dapatkan lokasi gps dengan -
sumber
location.getSpeed()
mengembalikan kecepatan dalam meter / detik (bukan meter / menit).Anda harus menggunakan yang terbaru / terbaru
Pada dasarnya yang perlu Anda lakukan adalah:
Kemudian
untuk lokasi yang paling akurat dan andal. Lihat posting saya di sini:
https://stackoverflow.com/a/33599228/2644905
Jangan gunakan LocationListener yang tidak akurat dan responsnya tertunda. Sejujurnya ini lebih mudah diterapkan. Baca juga dokumentasi: https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient
sumber
Saya harap ini akan membantu Anda ...
sumber
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Sekarang karena layanan lokasi Google Play ada di sini, saya sarankan agar pengembang mulai menggunakan penyedia lokasi yang menyatu baru. Anda akan merasa lebih mudah digunakan dan lebih akurat. Silakan tonton video Google I / O Beyond the Blue Dot: Fitur Baru di Android Location oleh dua orang yang membuat API layanan lokasi Google Play yang baru.
Saya telah bekerja dengan API lokasi di sejumlah platform seluler, dan saya pikir apa yang telah dilakukan kedua orang ini benar-benar revolusioner. Ini telah menyingkirkan sejumlah besar kompleksitas menggunakan berbagai penyedia. Stack Overflow dipenuhi dengan pertanyaan tentang penyedia mana yang akan digunakan, apakah akan menggunakan lokasi yang diketahui terakhir, cara mengatur properti lain di LocationManager, dll. API baru yang mereka buat ini menghapus sebagian besar dari ketidakpastian itu dan membuat layanan lokasi menjadi menyenangkan untuk menggunakan.
Saya telah menulis aplikasi Android yang secara berkala mendapatkan lokasi menggunakan layanan lokasi Google Play dan mengirimkan lokasi ke server web di mana ia disimpan dalam database dan dapat dilihat di Google Maps . Saya telah menulis perangkat lunak klien (untuk Android, iOS, Windows Phone dan Java ME ) dan perangkat lunak server (untuk ASP.NET dan SQL Server atau PHP dan MySQL ). Perangkat lunak ini ditulis dalam bahasa asli di setiap platform dan berfungsi dengan baik di latar belakang masing-masing. Terakhir, perangkat lunak tersebut memiliki Lisensi MIT . Anda dapat menemukan klien Android di sini:
https://github.com/nickfox/GpsTracker/tree/master/phoneClients/android
sumber
Sederhana dapat Anda temukan
sumber
LocationManager adalah kelas yang menyediakan metode built-in untuk mendapatkan lokasi tahu terakhir
LocationManager locationManager = (LocationManager) context.getSystemService (Context.LOCATION_SERVICE);
Threre adalah dua jenis penyedia GPS dan jaringan
Jika objek lokasi adalah nol maka jangan mencoba untuk memanggil metode di bawah ini
getLatitude and getLongitude is methods which returns double values
sumber
Mendapatkan pembaruan lokasi memerlukan banyak kode pirierplate di Android, Anda harus berhati-hati
Untuk mempermudah semua langkah ini saya telah membuat Android-EasyLocation (perpustakaan android kecil) yang akan mengurus semua hal ini dan Anda dapat fokus pada logika bisnis.
Yang Anda butuhkan adalah memperpanjang EasyLocationActivity dan ini
atau
Periksa contoh aplikasi dan langkah-langkah yang diperlukan di sini di https://github.com/akhgupta/Android-EasyLocation
sumber
Saya telah membuat proyek dari mana kita bisa mendapatkan lokasi yang akurat menggunakan Google Play Services, GPS, dan penyedia Jaringan. Proyek ini dapat ditemukan di sini .
Strategi dalam menemukan lokasi terbaik adalah yang pertama mendapatkan lokasi dari layanan google play jika lokasi ditemukan kemudian memeriksa cuaca lebih baik atau tidak, jika lokasi yang ditemukan adalah nol memulai kembali layanan google play dan mencoba untuk mengambil lokasi dari Android Location API. Daftarkan lokasi pada perubahan pendengar dan kapan pun lokasi yang lebih baik ditemukan, panggilan balik mengembalikannya ke aktivitas utama.
Sangat mudah untuk menggunakan dan mengimplementasikan dalam kode hanya dua kelas yang perlu kita embed yaitu
LocationManagerInterface
danSmartLocationManager
,LocationActivity
mengimplementasikan antarmuka dan menggunakan SmartLocationManager untuk mengambil lokasi.di sini adalah kelas manajer lokasi
kita dapat menggunakannya dengan aktivitas atau sebuah fragmen, di sini saya menggunakannya dengan aktivitas
Semoga ini bisa membantu, jika Anda dapat menyarankan perbaikan, silakan posting di git . Terima kasih.
sumber
GoogleSamples memiliki contoh verbose menggunakan FusedLocationProviderApi terbaru. Sayangnya jawaban yang paling banyak dipilih kedaluwarsa.
Ikuti contoh di bawah ini untuk mengimplementasikan Layanan Lokasi menggunakan FusedLocationProviderApi
https://github.com/googlesamples/android-play-location/tree/master/LocationUpdates
https://github.com/googlesamples/android-play-location/blob/master/LocationUpdates/app/src/main/java/com/google/android/gms/location/sample/locationupdates/MainActivity.java
sumber
Jika Anda membuat proyek lokasi baru untuk Android, Anda harus menggunakan Google Play yang baru layanan lokasi . Ini jauh lebih akurat dan lebih mudah digunakan.
Saya telah mengerjakan proyek pelacak GPS open source , GpsTracker, selama beberapa tahun. Baru-baru ini saya memperbaruinya untuk menangani pembaruan berkala dari ponsel Android, iOS, Windows Phone dan Java ME . Ini berfungsi penuh dan melakukan apa yang Anda butuhkan dan memiliki Lisensi MIT .
Proyek Android dalam GpsTracker menggunakan layanan Google Play baru dan ada juga dua tumpukan server ( ASP.NET dan PHP ) untuk memungkinkan Anda melacak ponsel-ponsel itu.
sumber
Untuk pemeriksaan lokasi saja, Anda dapat menggunakan kode berikut. Anda bisa meletakkannya di onStart () aktivitas utama Anda dan menampilkan dialog peringatan jika return salah.
sumber
Saya mendapatkan lokasi yang sangat akurat menggunakan FusedLocationProviderClient
( diperlukan layanan Google Play )
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
'com.google.android.gms: play-services-location: 15.0.0'
sumber
Cara terbaik untuk mengambil lokasi ada di bawah ini
sumber
Saya telah menerbitkan perpustakaan kecil yang dapat membuatnya mudah untuk mendapatkan data lokasi di Android, bahkan mengurus izin runtime Android M.
Anda dapat memeriksanya di sini: https://github.com/julioromano/RxLocation dan menggunakannya atau kode sumbernya sebagai contoh untuk implementasi Anda.
sumber
Cari Kode Tulis Sederhana di Metode Di Lokasi
sumber
Saya akan merekomendasikan menggunakan Perpustakaan Lokasi Cerdas
Sangat mudah digunakan dan membungkus logika lokasi dengan baik.
Untuk memulai layanan lokasi:
Jika Anda hanya ingin mendapatkan satu lokasi (tidak periodik) Anda bisa menggunakan pengubah oneFix. Contoh:
sumber
Cara sederhana dan mudah,
Dapatkan lokasi menggunakan https://github.com/sachinvarma/EasyLocation .
Langkah 1: Panggil saja
timeInterval -> setInterval (panjang) (inMilliSeconds) artinya - setel interval tempat Anda ingin mendapatkan lokasi.
tercepatTimeInterval -> setFastestInterval (panjang) (inMilliSeconds) berarti - jika lokasi tersedia lebih cepat Anda bisa mendapatkannya. (yaitu aplikasi lain menggunakan layanan lokasi).
runAsBackgroundService = True -> (Layanan akan berjalan di Latar Belakang dan Pembaruan Sering (sesuai dengan timeInterval dan tercepatTimeInterval)) runAsBackgroundService = Salah -> (Layanan akan dihancurkan setelah pembaruan lokasi yang berhasil)
Langkah 2: Persiapkan pelanggan EventBus: Deklarasikan dan beri anotasi metode berlangganan Anda, tentukan secara spesifik mode utas:
misalnya:
Itu saja.
Semoga ini akan membantu seseorang di masa depan.
sumber
April 2020
Langkah penuh untuk mendapatkan lokasi saat ini, dan menghindari pembatalan Lokasi yang Terakhir Diketahui.
Menurut dokumentasi resmi , terakhir dikenal Lokasi bisa menjadi Null dalam hal:
Dalam hal ini, Anda harus memintaLocationUpdates dan menerima lokasi baru di LocationCallback .
Dengan langkah-langkah berikut ini, Lokasi terakhir Anda yang diketahui tidak pernah nol.
Prasyarat: Pustaka EasyPermission
Langkah 1: Dalam file manifes, tambahkan izin ini
Langkah 2:
Langkah 3: Buat fungsi yang diperlukan untuk dipanggil di onCreate ()
Langkah 4:
Tangani panggilan balik di onActivityResult () setelah memastikan lokasi dibuka atau pengguna menerima untuk membukanya.
Langkah 5: Dapatkan lokasi terakhir yang diketahui dari FusedClientApi
Saya harap ini akan membantu.
Selamat Pengodean 🤓
sumber