Как включить сеть и местоположение GPS из моего приложения?

Я пытаюсь узнать местоположение пользователя:

// получение статуса GPS

isGPSEnabled = locationManage.isProviderEnabled(LocationManager.GPS_PROVIDER);

        // getting network status
        isNetworkEnabled = locationManager
                .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if (!isGPSEnabled && !isNetworkEnabled) {
            // no network provider is enabled
            Log.e(MyLogger.TAG, "Non providers are enabled");

Мне нужен пользователь, чтобы установить enable network location или же turn on GPS,

Как я могу помочь пользователю сделать каждый из этих вариантов?

  1. откройте страницу настроек устройства и вернитесь к моей активности, нажав назад.

  2. изменить эти две настройки устройства только из моего приложения?

Это означает открытие диалогового окна подтверждения, которое активирует эти две настройки.

3 ответа

Решение

После 4.1 изменения этих настроек в коде больше невозможны (они могут быть обходными путями, чтобы включить его, потому что об ошибке смотрите здесь, но она не будет работать на 4.3 или 4.4 или вам нужны рутированные телефоны, что вы можете сделать, это показать диалог с пользователем, чтобы перейти к настройкам, чтобы включить GPS

public static void LocationAlertDialog(final Context context) {

    AlertDialog.Builder d = new AlertDialog.Builder(context);
    d.setTitle("No Providers");
    d.setMessage("Unfortunately, you don't have any providers to get your location, would you like to turn on your GPS?");

    d.setNegativeButton(context.getResources().getString(R.string.dialogCancel), new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
        }
    });

    d.setPositiveButton(context.getResources().getString(R.string.dialogAccept), new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            context.startActivityForResult(i, 0);
        }
    });

    d.show();
}

вызвать предыдущую функцию в

if (!isGPSEnabled && !isNetworkEnabled) {
        LocationAlertDialog(this);
        Log.e(MyLogger.TAG, "Non providers are enabled");

тогда в вашем onActivityResult Вы можете проверить код 0, если GPS включен или нет

startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0);

С последним API местоположения вы можете предложить пользователю динамически менять настройки местоположения через диалог настроек внутри приложения.

https://developer.android.com/training/location/change-location-settings.html

Другие вопросы по тегам