Apakah mungkin untuk mendapatkan lokasi pengguna saat ini tanpa menggunakan GPS atau internet? Maksud saya dengan bantuan penyedia jaringan seluler.
Apakah mungkin untuk mendapatkan lokasi pengguna saat ini tanpa menggunakan GPS atau internet? Maksud saya dengan bantuan penyedia jaringan seluler.
Jawaban:
Apa yang ingin Anda lakukan adalah mendapatkan posisi menggunakan LocationManager.NETWORK_PROVIDER
alih - alih LocationManager.GPS_PROVIDER
. Ini NETWORK_PROVIDER
akan menyelesaikan pada GSM atau wifi, yang pernah tersedia. Tentunya dengan wifi off, GSM akan digunakan. Perlu diingat bahwa menggunakan jaringan seluler pada dasarnya akurat hingga 500 m.
http://developer.android.com/guide/topics/location/obtaining-user-location.html memiliki beberapa informasi dan contoh kode yang sangat bagus.
Setelah Anda menyelesaikan sebagian besar kode OnCreate()
, tambahkan ini:
// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
makeUseOfNewLocation(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
Anda juga bisa membuat aktivitas Anda mengimplementasikan LocationListener
kelas dan kemudian mengimplementasikannya onLocationChanged()
dalam aktivitas Anda.
Dengan mendapatkan getLastKnownLocation
Anda tidak benar-benar memulai perbaikan sendiri.
Ketahuilah bahwa ini dapat memulai penyedia, tetapi jika pengguna pernah mendapatkan lokasi sebelumnya, saya rasa itu tidak akan terjadi. Dokumen tidak terlalu jelas tentang ini.
Menurut dokumen getLastKnownLocation:
Mengembalikan Lokasi yang menunjukkan data dari perbaikan lokasi terakhir yang diketahui yang diperoleh dari penyedia tertentu. Ini dapat dilakukan tanpa memulai penyedia.
Berikut ini cuplikan singkatnya:
import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import java.util.List;
public class UtilLocation {
public static Location getLastKnownLoaction(boolean enabledProvidersOnly, Context context){
LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Location utilLocation = null;
List<String> providers = manager.getProviders(enabledProvidersOnly);
for(String provider : providers){
utilLocation = manager.getLastKnownLocation(provider);
if(utilLocation != null) return utilLocation;
}
return null;
}
}
Anda juga harus menambahkan izin baru ke AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
PASSIVE_PROVIDER
, NETWORK_PROVIDER
dan GPS_PROVIDER
.
boolean gps_enabled = false;
boolean network_enabled = false;
LocationManager lm = (LocationManager) mCtx
.getSystemService(Context.LOCATION_SERVICE);
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Location net_loc = null, gps_loc = null, finalLoc = null;
if (gps_enabled)
gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (network_enabled)
net_loc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (gps_loc != null && net_loc != null) {
//smaller the number more accurate result will
if (gps_loc.getAccuracy() > net_loc.getAccuracy())
finalLoc = net_loc;
else
finalLoc = gps_loc;
// I used this just to get an idea (if both avail, its upto you which you want to take as I've taken location with more accuracy)
} else {
if (gps_loc != null) {
finalLoc = gps_loc;
} else if (net_loc != null) {
finalLoc = net_loc;
}
}
Tidak, saat ini Anda tidak bisa mendapatkan lokasi tanpa menggunakan GPS atau internet.
Teknik lokasi berdasarkan WiFi, Seluler, atau Bluetooth berfungsi dengan bantuan database besar yang terus diperbarui. Perangkat memindai ID pemancar dan kemudian mengirimkannya dalam kueri melalui internet ke layanan seperti Google, Apple, atau Skyhook. Layanan tersebut merespons dengan lokasi berdasarkan survei nirkabel sebelumnya dari lokasi yang diketahui. Tanpa akses internet, Anda harus memiliki salinan lokal dari database tersebut dan selalu memperbaruinya. Untuk penggunaan global, ini sangat tidak praktis.
Secara teoritis, penyedia seluler dapat menyediakan layanan data lokal saja tetapi tidak dapat mengakses internet, dan kemudian menjawab pertanyaan lokasi dari perangkat seluler. Operator seluler tidak melakukan ini; tidak ada yang mau membayar untuk akses data yang dibatasi semacam ini. Jika Anda memiliki layanan data melalui penyedia seluler Anda, maka Anda memiliki akses internet.
Singkatnya, menggunakan LocationManager.NETWORK_PROVIDER atau android.hardware.location.network untuk mendapatkan lokasi membutuhkan penggunaan internet.
Menggunakan posisi terakhir yang diketahui mengharuskan Anda memiliki GPS atau akses internet baru-baru ini. Jika Anda baru saja memiliki internet, kiranya Anda dapat menyesuaikan posisi atau pengaturan Anda untuk mendapatkan internet kembali. Jika perangkat Anda tidak memiliki GPS atau akses internet, fitur posisi terakhir yang diketahui tidak akan membantu Anda.
Tanpa GPS atau internet, Anda dapat:
Di sini mungkin untuk mendapatkan lokasi Pengguna saat ini Tanpa menggunakan GPS dan Penyedia Jaringan.
1. Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"
Sudahkah Anda melihat Api Geolokasi Google Maps? Google Map Geolocation
Ini adalah RestApi sederhana, Anda hanya perlu POST permintaan, layanan akan mengembalikan lokasi dengan akurasi dalam meter.
Tampaknya dimungkinkan untuk melacak ponsel pintar tanpa menggunakan GPS.
Sumber:
Utama: "PinMe: Melacak Pengguna Ponsel Cerdas di Seluruh Dunia"
Sekunder: "Cara Melacak Ponsel Tanpa GPS — atau Persetujuan"
Saya belum menemukan tautan ke kode akhir tim. Ketika saya melakukannya, saya akan memposting, jika orang lain belum melakukannya.
Anda dapat menggunakan TelephonyManager untuk melakukan itu.