Проверьте, включил ли пользователь GPS после запроса - PullRequest
11 голосов
/ 17 мая 2011

Просто и понятно. Я запускаю Activity и проверяю, включен ли в телефоне модуль GPS или нет. Если он не включен, я запрашиваю у пользователя диалоговое окно и спрашиваю, хочет ли он включить его вручную. На Да я активирую Настройки для Местоположения. Теперь пользователь может включить его, если хочет, но мне нужно проверить, что он сделал.

try {
    isGPSEnabled = locationManager
            .isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {}
if (isGPSEnabled) {
    locationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);
} else {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(
            "Your GPS module is disabled. Would you like to enable it ?")
            .setCancelable(false)
            .setPositiveButton("Yes",
                    new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog,
                                int id) {
                            // Sent user to GPS settings screen
                            final ComponentName toLaunch = new ComponentName(
                                    "com.android.settings",
                                    "com.android.settings.SecuritySettings");
                            final Intent intent = new Intent(
                                    Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                            intent.addCategory(Intent.CATEGORY_LAUNCHER);
                            intent.setComponent(toLaunch);
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivityForResult(intent, 1);
                            dialog.dismiss();
                        }
                    })
            .setNegativeButton("No",
                    new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog,
                                int id) {
                            dialog.cancel();
                        }
                    });
    AlertDialog alert = builder.create();
    alert.show();
}

Мне нужно знать, что пользователь выбрал в настройках местоположения, когда он возвращается, чтобы продолжить мою логику в коде. В основном мне нужно подождать, пока пользователь сделает выбор и вернуться к своей деятельности, а также снова проверить состояние модуля gps.

1 Ответ

20 голосов
/ 17 мая 2011

Почему бы просто не проверить LocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) в вашем onActivityResult() методе? Когда пользователь возвращается, этот метод должен быть вызван, потому что вы вызвали startActivityForResult(). Если пользователь включил GPS, то isProviderEnabled() теперь должен вернуть другой результат.

В качестве альтернативы всегда выполняйте проверку GPS в методе onResume. Если пользователь вернется из настроек местоположения и не включит GPS, он будет просто получать то же самое приглашение, пока GPS не будет включен.

Или я что-то упустил?

...