Layanan Lokasi Google Vs Layanan Lokasi Android

Seperti yang kita ketahui, kita memiliki dua alternatif untuk membuat aplikasi kita mengetahui lokasi. Baik kita menggunakan API Layanan Lokasi Google (bagian dari layanan Google Play) atau kita menggunakan API Lokasi Android.

Masalah yang saya alami di sini adalah saat menggunakan layanan Google, kita harus menggunakan antarmuka com.google.android.gms.location.LocationListener yang memberi kita pembaruan lokasi. Namun tidak seperti Android.location.LocationListener, versi Google tidak memberi kita status penyedia lokasi (gps atau internet).

kami memiliki metode berikut di Pendengar Lokasi Android

abstract void   onLocationChanged(Location location)
Called when the location has changed.
abstract void   onProviderDisabled(String provider)
Called when the provider is disabled by the user.
abstract void   onProviderEnabled(String provider)
Called when the provider is enabled by the user.
abstract void   onStatusChanged(String provider, int status, Bundle extras)
Called when the provider status changes

.

Namun di Google kami hanya punya satu

abstract void   onLocationChanged(Location location)

Bagaimana cara mengidentifikasi perubahan pada penyedia jika saya menggunakan layanan Google? . Misalnya di tengah penggunaan aplikasi, pengguna memutuskan untuk mematikan GPS, saya ingin bersulang untuk acara ini.

Saya tidak tahu bagaimana saya harus mencapainya.


person Muhammad Ahmed AbuTalib    schedule 06.08.2014    source sumber
comment
developer.android.com/google/play-services/location.html developer.android.com/training/location/ Periksa Ini   -  person Ando Masahashi    schedule 06.08.2014


Jawaban (2)


Anda mendaftarkan penerima untuk menangani tindakan Providers_changed.

private static final String ACTION_GPS = "android.location.PROVIDERS_CHANGED";
private BroadcastReceiver yourReceiver;

private void checkGPS() {
    Context context = this.getApplicationContext();
    if (context != null) {
        Button btnGPS = (Button) findViewById(R.id.btnGPS);
        if (btnGPS != null) {
            LocationManager locationManager = (LocationManager) context
                    .getSystemService(Context.LOCATION_SERVICE);
            boolean b = locationManager
                    .isProviderEnabled(LocationManager.GPS_PROVIDER);
            locationManager = null;
            if (b) {
                if (btnGPS.getVisibility() != View.GONE) {
                    btnGPS.setVisibility(View.GONE);
                }
            } else {
                if (btnGPS.getVisibility() != View.VISIBLE) {
                    btnGPS.setVisibility(View.VISIBLE);
                }
            }
        }
    }
}

private void registerReceiverGPS() {
    if (yourReceiver == null) {
        // INTENT FILTER FOR GPS MONITORING
        final IntentFilter theFilter = new IntentFilter();
        theFilter.addAction(ACTION_GPS);
        yourReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent != null) {
                    String s = intent.getAction();
                    if (s != null) {
                        if (s.equals(ACTION_GPS)) {
                            checkGPS();
                        }
                    }
                }
            }
        };
        registerReceiver(yourReceiver, theFilter);
    }
}


 @Override
 public void onResume() {
 super.onResume();
 checkGPS();
 registerReceiverGPS();



    @Override
public void onStop() {
    super.onStop();
    // Do not forget to unregister the receiver!!!
    if (yourReceiver != null) {
        unregisterReceiver(yourReceiver);
        yourReceiver = null;
    }
person danny117    schedule 06.08.2014

versi Google tidak memberi kita status penyedia lokasi (gps atau internet)

Hal ini sebagian karena perusahaan tidak menggunakan penyedia lokasi mana pun.

Bagaimana cara mengidentifikasi perubahan pada penyedia jika saya menggunakan layanan Google?

Anda dapat mencoba mendengarkan PROVIDERS_CHANGED_ACTION siaran.

person CommonsWare    schedule 06.08.2014
comment
Jadi bisakah Anda menyarankan mekanisme apa pun yang dapat saya gunakan untuk memberi tahu pengguna bahwa dia lupa mengaktifkan sensor Lokasinya dari pengaturan? . Saya kira ini tidak terlalu banyak untuk diminta. Hal ini mungkin sering terjadi. Pengguna akan menunggu lokasi untuk diperbarui tanpa mengetahui fakta bahwa dia lupa menyalakan adaptor. - person Muhammad Ahmed AbuTalib; 06.08.2014
comment
@MuhammadAhmedAbuTalib: Jadi bisakah Anda menyarankan mekanisme apa pun yang dapat saya gunakan untuk memberi tahu pengguna bahwa dia lupa mengaktifkan sensor Lokasi dari pengaturan? -- gunakan LocationManager dan isProviderEnabled(). Hanya karena Anda mendapatkan lokasi melalui LocationClient tidak berarti Anda dilarang menggunakan LocationManager untuk hal lain. Dan, hanya karena LocationClient menyediakan lokasi tidak berarti LocationClient harus menduplikasi seluruh LocationManager API lainnya. - person CommonsWare; 06.08.2014