Androidの電話でユーザーがGPS設定をオンまたはオフに変更したときを検出します。ユーザーがGPSサテライトをオン/オフに切り替えたとき、またはアクセスポイントなどを介して検出したときの意味です。
私がこれを行う最善の方法を見つけたので、
<action Android:name="Android.location.PROVIDERS_CHANGED" />
意図。
例えば:
<receiver Android:name=".gps.GpsLocationReceiver">
<intent-filter>
<action Android:name="Android.location.PROVIDERS_CHANGED" />
<category Android:name="Android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
そして、コードで:
public class GpsLocationReceiver extends BroadcastReceiver implements LocationListener
...
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().matches("Android.location.PROVIDERS_CHANGED"))
{
// react on GPS provider change action
}
}
これを試して、
try {
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
Log.i("About GPS", "GPS is Enabled in your devide");
} else {
//showAlert
}
Android.location.LocationListenerを実装すると、2つの関数があります。
public void onProviderEnabled(String provider);
public void onProviderDisabled(String provider);
これを使用して、要求されたプロバイダーがいつオンまたはオフになっているかを確認できます
以下は、BroadcastReceiverがGPSロケーションのON/OFFイベントを検出するためのコードサンプルです。
private BroadcastReceiver locationSwitchStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (LocationManager.PROVIDERS_CHANGED_ACTION.equals(intent.getAction())) {
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
boolean isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (isGpsEnabled || isNetworkEnabled) {
//location is enabled
} else {
//location is disabled
}
}
}
};
マニフェストファイルを変更する代わりに、BroadcastReceiverを動的に登録できます。
IntentFilter filter = new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION);
filter.addAction(Intent.ACTION_PROVIDER_CHANGED);
mActivity.registerReceiver(locationSwitchStateReceiver, filter);
OnPause()メソッドでレシーバーの登録を解除することを忘れないでください:
mActivity.unregisterReceiver(locationSwitchStateReceiver);