Dapatkan lokasi pengguna saat ini di Android tanpa menggunakan GPS atau internet


91

Apakah mungkin untuk mendapatkan lokasi pengguna saat ini tanpa menggunakan GPS atau internet? Maksud saya dengan bantuan penyedia jaringan seluler.


1
Apakah jawaban yang diterima bekerja dengan sempurna? Bagi saya itu tidak berhasil ... !!!
Samitha Chathuranga

3
Sayangnya jawaban yang diterima salah :-( Mengagumkan karena mendapat 28 suara positif meskipun tidak menjawab pertanyaan dengan benar!
David Wasser

@DavidWasser Menghargai komentar berharga Anda. Dan apakah menurut Anda sebenarnya tidak ada metode untuk mendapatkan detail lokasi tanpa menggunakan internet atau gps? (selain menggunakan pesan siaran seluler)
Samitha Chathuranga

2
@SamithaChathuranga Pikirkan tentang ini: jika Anda tidak memiliki GPS dan tidak memiliki Internet, dari mana Anda akan mendapatkan informasi ini? Anda bisa mendapatkan informasi ID seluler dari jaringan. Ini hanya memberi Anda ID. Anda kemudian akan membutuhkan cara untuk memetakan ID ke koordinat atau nama yang sebenarnya. Anda selalu dapat membangun database ID seluler Anda sendiri dan memasukkannya ke dalam aplikasi Anda, tetapi akan membutuhkan banyak pekerjaan untuk mengumpulkan semua data itu dan pemetaannya tidak statis: itu berubah saat operator seluler memasang menara seluler baru dan memberi nomor baru jaringan mereka. Pada dasarnya, jawaban praktisnya adalah "tidak".
David Wasser

@DavidWasser Terima kasih atas balasannya. Saya juga sangat terkejut bagaimana mendapatkan lokasi tanpa internet atau gps. Tetapi termasuk stackoverflow di banyak forum, hal ini dikatakan mungkin. Itu sebabnya saya pikir itu akan mungkin. Sepertinya banyak orang yang salah arah juga.
Samitha Chathuranga

Jawaban:


87

Apa yang ingin Anda lakukan adalah mendapatkan posisi menggunakan LocationManager.NETWORK_PROVIDERalih - alih LocationManager.GPS_PROVIDER. Ini NETWORK_PROVIDERakan 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 LocationListenerkelas dan kemudian mengimplementasikannya onLocationChanged()dalam aktivitas Anda.


1
harap ingat untuk memeriksa strategi pelestarian baterai. Selain itu, bergantung pada aplikasi Anda, PASSIVE_PROVIDER dan penggunaan getLastKnownLocation dapat menghemat banyak pekerjaan dan baterai jika aplikasi lain menggunakan antena.
Ian

2
Hai @Ian, saya telah menggunakan kode yang sama .. Namun dalam kasus saya, metode pendengar onLocationChanged () tidak pernah dipanggil. Saya menggunakan requestLocationUpdates on onResume () metode. masih tidak pernah menelepon .. Jadi apa yang telah terjadi di sana?
MS.

2
Hai @lan atau orang lain yang dapat membantu saya, saya menerapkan kode di atas tetapi metode onLocationChanged tidak pernah dipanggil apa masalahnya, bisakah ada yang membantu saya .....
pareshm

1
Apakah mungkin mendapatkan koordinat tanpa internet? Di beberapa perangkat sepertinya tidak berfungsi.
iammilind

20
Jawaban ini salah :-( OP bertanya bagaimana cara mendapatkan lokasi tanpa menggunakan koneksi Internet. LOCATION_PROVIDER perlu menggunakan Internet untuk mengakses server guna menyelesaikan kumpulan alamat MAC-ID dan WIFI MAC menjadi koordinat geografis. Jika Anda tidak memiliki Internet koneksi Anda tidak akan bisa mendapatkan koordinat. Jika Anda memberi tahu saya bahwa ini berfungsi untuk Anda, itu berarti Anda memiliki koneksi Internet, atau Anda memiliki koneksi Internet (API lokasi mengunduh dan menyimpan beberapa informasi tentang area di sekitar Anda) , atau informasi lokasi sudah lama (dan karena itu tidak akurat).
David Wasser

16

Dengan mendapatkan getLastKnownLocationAnda 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" />

Yang saya pikirkan adalah, Mungkinkah mendapatkan lokasi saat ini menggunakan jaringan seluler
Prabhu M

Anda perlu membaca dokumennya. Pelajari perbedaan antara PASSIVE_PROVIDER, NETWORK_PROVIDERdan GPS_PROVIDER.
hwrdprkns

1
Meskipun ini ideal, saya akan memeriksa waktu dari lokasi terakhir menggunakan getTime (). Kemudian, tinggal menentukan berapa usia Anda akan mengizinkan ini. Jika terlalu lama, dapatkan posisi baru menggunakan posting saya.
Ian

1
@Ian Bagaimana cara mendapatkan lokasi baru atau segar?
Archie.bpgc

5
Bisakah kita mendapatkan lokasi jika gps mati
Prasad

4
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;
    }
}

4

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:

  1. Ambil gambar langit malam dan gunakan waktu saat ini untuk memperkirakan lokasi Anda berdasarkan grafik bintang. Ini mungkin membutuhkan peralatan tambahan untuk memastikan bahwa sudut gambar Anda diukur dengan benar.
  2. Gunakan akselerometer untuk melacak lokasi mulai dari posisi yang diketahui. Akumulasi kesalahan dalam pendekatan semacam ini membuatnya tidak praktis untuk kebanyakan situasi.


2

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.



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.