Google定位服务与Android定位服务

正如我们所知,我们有两个替代scheme可以使我们的应用程序的位置感知我们使用Google的位置服务API(Google Play服务的一部分)或者我们使用Android的位置API。

我在这里遇到的问题是,使用Google的服务,我们必须使用接口com.google.android.gms.location.LocationListener,它为我们提供位置更新。 然而,不像android.location.LocationListener,谷歌的版本不提供我们的位置提供商(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 

但在谷歌,我们只有一个

 abstract void onLocationChanged(Location location) 

如果我正在使用Google服务,如何识别提供者中的更改? 。 例如,在应用程序使用中,用户决定closuresGPS,我想在这个事件上表示敬意。

我在黑暗中,我该如何实现这一目标。

Solutions Collecting From Web of "Google定位服务与Android定位服务"

您注册一个接收器来处理活动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; } 

谷歌的版本不'提供我们的位置提供者(GPS或互联网)的状态,

部分原因是因为它没有使用任何一个位置提供者。

如果我正在使用Google服务,如何识别提供者中的更改?

您可以尝试收听PROVIDERS_CHANGED_ACTION广播 。