Android получить местоположение или предложить включить службу определения местоположения, если отключено - PullRequest
13 голосов
/ 12 августа 2010

Я нашел фрагменты этого ответа, разбросанные по другим постам, но я хотел записать его здесь для других.

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

Ответы [ 3 ]

19 голосов
/ 12 августа 2010

Если вы хотите зафиксировать местоположение одним нажатием кнопки, вот как вы это сделаете.Если у пользователя не включена служба определения местоположения, он отправит его в меню настроек, чтобы включить его.

Сначала необходимо добавить разрешение "android.permission.ACCESS_COARSE_LOCATION" в манифест.Если вам нужен GPS (местоположение в сети недостаточно чувствительно), вместо этого добавьте разрешение «android.permission.ACCESS_FINE_LOCATION» и замените «Criteria.ACCURACY_COARSE» на «Criteria.ACCURACY_FINE»

Button gpsButton = (Button)this.findViewById(R.id.buttonGPSLocation);
gpsButton.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // Start loction service
        LocationManager locationManager = (LocationManager)[OUTERCLASS].this.getSystemService(Context.LOCATION_SERVICE);

        Criteria locationCritera = new Criteria();
        locationCritera.setAccuracy(Criteria.ACCURACY_COARSE);
        locationCritera.setAltitudeRequired(false);
        locationCritera.setBearingRequired(false);
        locationCritera.setCostAllowed(true);
        locationCritera.setPowerRequirement(Criteria.NO_REQUIREMENT);

        String providerName = locationManager.getBestProvider(locationCritera, true);

        if (providerName != null && locationManager.isProviderEnabled(providerName)) {
            // Provider is enabled
            locationManager.requestLocationUpdates(providerName, 20000, 100, [OUTERCLASS].this.locationListener);
        } else {
            // Provider not enabled, prompt user to enable it
            Toast.makeText([OUTERCLASS].this, R.string.please_turn_on_gps, Toast.LENGTH_LONG).show();
            Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            [OUTERCLASS].this.startActivity(myIntent);
        }
    }
});

Myвнешний класс настроил этот слушатель

private final LocationListener locationListener = new LocationListener() {

    @Override
    public void onLocationChanged(Location location) {
        [OUTERCLASS].this.gpsLocationReceived(location);
    }

    @Override
    public void onProviderDisabled(String provider) {}

    @Override
    public void onProviderEnabled(String provider) {}

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}

};

Затем, всякий раз, когда вы хотите прекратить прослушивание, вызывайте это.Вы должны хотя бы сделать этот вызов во время использования метода onStop вашей деятельности.

LocationManager locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
locationManager.removeUpdates(this.locationListener);
2 голосов
/ 28 ноября 2016

Пройдя много ответов о переполнении стека, я обнаружил, что этот метод работает отлично и даже не требует большого количества кода.
Объявите int GPSoff = 0 как глобальную переменную.
Теперь где угодновам нужно проверить текущее состояние GPS и перенаправить пользователя на включение GPS, используйте это:

try {
                GPSoff = Settings.Secure.getInt(getContentResolver(),Settings.Secure.LOCATION_MODE);
            } catch (Settings.SettingNotFoundException e) {
                e.printStackTrace();
            }
            if (GPSoff == 0) {
                showMessageOKCancel("You need to turn Location On",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Intent onGPS = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                                startActivity(onGPS);
                            }
                        });
            }
0 голосов
/ 01 августа 2016

Чтобы предложить пользователю включить службы определения местоположения, вы должны использовать новый LocationRequest, включенный в службы Google Play, полное руководство можно найти в LocationRequest

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