web-dev-qa-db-ja.com

Android電話でのGPSオン/オフスイッチの検出

Androidの電話でユーザーがGPS設定をオンまたはオフに変更したときを検出します。ユーザーがGPSサテライトをオン/オフに切り替えたとき、またはアクセスポイントなどを介して検出したときの意味です。

31
Drejc

私がこれを行う最善の方法を見つけたので、

<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 
        }
}
39
Drejc

これを試して、

try {
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

            Log.i("About GPS", "GPS is Enabled in your devide");
        } else {
            //showAlert
        }
4
Andro Selva

Android.location.LocationListenerを実装すると、2つの関数があります。

public void onProviderEnabled(String provider);
public void onProviderDisabled(String provider);

これを使用して、要求されたプロバイダーがいつオンまたはオフになっているかを確認できます

3
Azlam

以下は、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);
2
matdev