Настройки местоположения для API Google places для определения текущего местоположения

#android #google-places-api

#Android #google-places-api

Вопрос:

Я пытаюсь использовать API Google places для определения текущего местоположения устройства с помощью PlaceDetectionApi. Я ожидал, что в случае, если необходимые настройки не включены для определения текущего местоположения, запуск разрешения должен побудить пользователя включить службы определения местоположения без необходимости создавать объект LocationSettings и вызывать его явно для разрешения. Я что-то упустил?

Ответ №1:

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

  public static boolean isLocationServicesAvailable(Context context) {
        int locationMode = 0;
        String locationProviders;
        boolean isAvailable = false;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            try {
                locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
            } catch (Settings.SettingNotFoundException e) {
                e.printStackTrace();
            }

            isAvailable = (locationMode != Settings.Secure.LOCATION_MODE_OFF);
        } else {
            locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
            isAvailable = !TextUtils.isEmpty(locationProviders);
        }

        // boolean coarsePermissionCheck = (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED);
        // boolean finePermissionCheck = (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED);

        return isAvailable;
    }
  

открытие настроек в случае отключения:

 if(!isLocationServicesAvailable(this)) {
            // notify user
            AlertDialog.Builder dialog = new AlertDialog.Builder(this);
            dialog.setMessage("enabled");
            dialog.setPositiveButton("open GPS", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                    // TODO Auto-generated method stub
                    Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivity(myIntent);
                    //get gps
                }
            });
            dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                    // TODO Auto-generated method stub

                }
            });
            dialog.show();
        }
  

Комментарии:

1. Я надеялся, что есть лучшее общее разрешение вместо того, чтобы проверять наличие Интернета и gps вручную