Sebuah ponsel android sebenarnya tahu betul di mana itu - tetapi apakah ada cara untuk mengambil negara dengan sesuatu seperti kode negara?
Tidak perlu mengetahui posisi GPS yang tepat - negara ini cukup
Saya pertama kali berpikir untuk menggunakan zona waktu, tetapi sebenarnya saya memerlukan informasi lebih dari itu karena itu membuat perbedaan jika lokasinya New York atau Lima.
Latar belakang pertanyaan: Saya memiliki aplikasi yang menggunakan nilai suhu, dan saya ingin mengatur unit default menjadi Celcius atau Fahrenheit, tergantung pada apakah lokasi AS atau di luar
android
geolocation
DonGru
sumber
sumber
Jawaban:
Ini akan mengatur kode negara untuk telepon (bahasa ponsel, BUKAN lokasi pengguna):
juga dapat mengganti getCountry () dengan getISO3Country () untuk mendapatkan kode ISO 3 huruf untuk negara tersebut. Ini akan mendapatkan nama negara :
Ini tampaknya lebih mudah daripada metode lain dan bergantung pada pengaturan lokalisasi pada ponsel, jadi jika pengguna AS di luar negeri mereka mungkin masih menginginkan Fahrenheit dan ini akan berhasil :)
Catatan editor : Solusi ini tidak ada hubungannya dengan lokasi telepon. Itu konstan. Saat Anda bepergian ke Jerman, lokal TIDAK akan berubah. Singkatnya: lokal! = Lokasi.
sumber
sumber
getSimCountryIso
akan mengatakanus
dangetNetworkCountryIso
akan mengatakanfr
toLowerCase()
panggilantoUpperCase()
.Gunakan tautan ini http://ip-api.com/json , ini akan memberikan semua informasi sebagai json. Dari json ini Anda bisa mendapatkan negara dengan mudah. Situs ini berfungsi menggunakan IP Anda saat ini, secara otomatis mendeteksi rincian IP dan sendback.
Docs http://ip-api.com/docs/api:json Semoga membantu.
Contoh json
Catatan : Karena ini adalah solusi pihak ke-3, hanya gunakan jika yang lain tidak berfungsi.
sumber
Sebenarnya saya baru tahu bahwa ada satu lagi cara untuk mendapatkan kode negara, menggunakan metode getSimCountryIso () dari
TelephoneManager
:Karena itu adalah kode sim itu juga tidak boleh berubah ketika bepergian ke negara lain.
sumber
Pertama, dapatkan LocationManager. Lalu, teleponlah
LocationManager.getLastKnownPosition
. Kemudian buat GeoCoder dan panggilGeoCoder.getFromLocation
. Lakukan ini di utas terpisah !! Ini akan memberi Anda daftarAddress
objek. PanggilAddress.getCountryName
dan Anda mendapatkannya.Perlu diingat bahwa posisi terakhir yang diketahui bisa sedikit basi, jadi jika pengguna baru saja melewati perbatasan, Anda mungkin tidak tahu tentang itu untuk sementara waktu.
sumber
Berikut ini adalah solusi lengkap berdasarkan LocationManager dan sebagai fallback TelephonyManager dan lokasi Penyedia Jaringan. Saya menggunakan jawaban di atas dari @Marco W. untuk bagian fallback (jawaban yang bagus!).
Catatan: kode berisi PreferencesManager, ini adalah kelas pembantu yang menyimpan dan memuat data dari SharedPrefrences. Saya menggunakannya untuk menyelamatkan negara ke S "P, saya hanya mendapatkan negara jika itu kosong. Untuk produk saya, saya tidak terlalu peduli untuk semua kasus tepi (pengguna bepergian ke luar negeri dan sebagainya).
sumber
country = addresses.get(0).getCountryName();
dalam kode Anda, yang akan memasukkan nama lengkap negara ke dalam variabelcountry
. Pada saat yang sama dalam metodegetCountryBasedOnSimCardOrNetwork(Context context)
Anda mengembalikan kode negara ISO. Saya yakin Anda ingin menuliscountry = addresses.get(0).getCountryCode();
:-)Anda dapat menggunakan
getNetworkCountryIso()
dariTelephonyManager
untuk mendapatkan negara tempat telepon saat ini (walaupun tampaknya ini tidak dapat diandalkan di jaringan CDMA).sumber
Sudah ditinggalkan. Gunakan ini sebagai gantinya:
sumber
Untuk beberapa perangkat, jika bahasa default disetel berbeda (orang India dapat mengatur Bahasa Inggris (AS))
akan memberikan nilai yang salah. Jadi metode ini tidak dapat diandalkan
Selain itu, metode TelephonyManager getNetworkCountryIso () tidak akan berfungsi pada perangkat yang tidak memiliki kartu SIM (tablet WIFI).
Jika suatu perangkat tidak memiliki SIM maka kita dapat menggunakan Time Zone untuk mendapatkan negara. Untuk negara-negara seperti India, metode ini akan berhasil
kode sampel yang digunakan untuk memeriksa negara adalah India atau tidak (id zona waktu: asia / calcutta)
sumber
Menggunakan GPS dengan garis lintang dan bujur, kita bisa mendapatkan kode Negara.
Jika kita menggunakan telepon, itu tidak akan berfungsi jika kita tidak menggunakan kartu sim dan secara lokal, berdasarkan bahasa, itu menunjukkan kode negara dengan cara yang salah.
MainActivity.java:
GPSTracker.java:
Catatan:
E / kode negara: DALAM
Sunting: Gunakan Penyedia Lokasi Fusi untuk mendapatkan pembaruan lintang dan bujur untuk hasil yang lebih baik.
sumber
Saya menggunakan GEOIP db dan membuat fungsi. Anda dapat mengkonsumsi tautan ini secara langsung http://jamhubsoftware.com/geoip/getcountry.php
Anda dapat mengunduh file autoload.php dan .mmdb dari https://dev.maxmind.com/geoip/geoip2/geolite2/
sumber