Службы определения местоположения Google против служб определения местоположения Android

Как мы знаем, у нас есть два варианта информирования о местоположении нашего приложения. Либо мы используем Google Location Services API (часть сервисов Google Play), либо мы используем Android Location API.

Проблема, с которой я столкнулся, заключается в том, что, используя службы Google, мы должны использовать интерфейс com.google.android.gms.location.LocationListener, который предоставляет нам обновления местоположения. Однако, в отличие от android.location.LocationListener, версия Google не предоставляет нам информацию о местоположении (GPS или Интернет).

у нас есть следующие методы в прослушивателе местоположения 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

.

Однако в Google у нас есть только один

abstract void   onLocationChanged(Location location)

Как мне определить изменения в поставщике, если я использую службы Google? . Например, в разгар использования приложения пользователь решает отключить GPS, я хотел показать тост об этом событии.

Я в темноте, как мне этого добиться.


person Muhammad Ahmed AbuTalib    schedule 06.08.2014    source источник
comment
developer.android.com/google/play-services/location.html developer.android.com/training/location/ Проверить Этот   -  person Ando Masahashi    schedule 06.08.2014


Ответы (2)


Вы регистрируете приемник для обработки действия 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

версия Google не предоставляет нам информацию о местоположении (GPS или Интернет)

Отчасти это связано с тем, что он не использует ни одного поставщика местоположения.

Как мне определить изменения в поставщике, если я использую службы Google?

Вы можете попробовать прослушивать PROVIDERS_CHANGED_ACTIONтрансляции.

person CommonsWare    schedule 06.08.2014
comment
Итак, можете ли вы предложить какой-либо механизм, с помощью которого я могу сообщить пользователю, что он забыл включить свои датчики местоположения в настройках? . Я не думаю, что это слишком много, чтобы просить. Это может происходить много раз. Пользователь будет ждать обновления локаций, зная о том, что он забыл включить адаптеры. - person Muhammad Ahmed AbuTalib; 06.08.2014
comment
@MuhammadAhmedAbuTalib: Можете ли вы предложить какой-либо механизм, с помощью которого я могу сообщить пользователю, что он забыл включить свои датчики местоположения в настройках? -- используйте LocationManager и isProviderEnabled(). Тот факт, что вы получаете информацию о своем местоположении через LocationClient, не означает, что вам запрещено использовать LocationManager для других целей. И то, что LocationClient предоставляет местоположения, не означает, что LocationClient должен полностью дублировать остальную часть LocationManager API. - person CommonsWare; 06.08.2014