как включить местоположение сети и 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. изменить эти две настройки устройства только в моем приложении?

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


person Elad Benda2    schedule 27.04.2014    source источник
comment
попробуйте эту ссылку: stackoverflow.com/questions/6095919/,   -  person SacreDeveloper    schedule 27.04.2014


Ответы (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 или нет

person Coderji    schedule 27.04.2014

startActivityForResult (новое намерение (android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0);

person xgc1986    schedule 27.04.2014
comment
Могу ли я изменить эти две настройки устройства только в моем приложении? - person Elad Benda2; 27.04.2014
comment
он изменится для всех ваших установленных приложений, вы не можете изменить конфигурацию местоположения только для одного приложения - person xgc1986; 27.04.2014
comment
нет, я имел в виду, как я могу изменить глобальные настройки для всех установленных приложений, но изнутри моего приложения - незаметно - не выводя пользователя на страницу настроек - person Elad Benda2; 27.04.2014
comment
с помощью кода, который я написал, вы попадете на страницу настроек местоположения и вернетесь в ваше приложение после изменения, затем настройка местоположения будет изменена для всех приложений. если вы хотите создать свое собственное представление конфигурации местоположений (без использования Android по умолчанию), я не думаю, что вы сможете этого добиться, возможно, запросить разрешения суперпользователя есть способ, но я не знаю, что - person xgc1986; 27.04.2014
comment
давным-давно был этот метод для gps, но это была ошибка code .google.com / p / android / issues / detail? id = 7890 - person xgc1986; 27.04.2014

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

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

person Anshul Kabra    schedule 21.02.2016