Обнаружение включения / выключения GPS в телефонах Android - PullRequest
29 голосов
/ 16 июня 2011

Я хотел бы определить, когда пользователь изменяет настройки GPS для телефона Android.Значение, когда пользователь включает / выключает спутник GPS или обнаружение через точки доступа и т. Д.

Ответы [ 4 ]

38 голосов
/ 21 июня 2011

Как я выяснил, лучший способ сделать это - присоединиться к

<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 
        }
}
4 голосов
/ 16 июня 2011

Попробуйте,

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

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

            Log.i("About GPS", "GPS is Enabled in your devide");
        } else {
            //showAlert
        }
2 голосов
/ 08 марта 2019

Вот пример кода для BroadcastReceiver, определяющего события включения / выключения местоположения GPS:

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 голосов
/ 16 июня 2011

Impement android.location.LocationListener, там у вас есть две функции

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

С помощью этого вы можете узнать, когда запрашиваемый поставщик включен или выключен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...