AlertDialog не отображается в MapsActivity

#java #android #maps

#java #Android #Карты

Вопрос:

У меня есть действие Google Maps в моем приложении для Android, и в нем есть AlertDialog, который вызывает настройки GPS, когда GPS отключен, но это диалоговое окно не отображается.

И затем происходит то, что я получаю активность Google Maps без маркеров, потому что диалоговое окно не просило меня активировать GPS.

 private void openSettingsDialog() {

    AlertDialog.Builder builder = new AlertDialog.Builder(MapsActivity.this);
    builder.setTitle("Permissões requeridas");
    builder.setMessage("Esta app precisa de permissões de GPS. Dê essas permissões nas definições.");
    builder.setPositiveButton("Definições", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            Uri uri = Uri.fromParts("package", getPackageName(), null);
            intent.setData(uri);
            startActivityForResult(intent, 101);
        }
    });
    builder.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    builder.show();

}
  

Именно здесь я вызываю openSettingsDialog()

 private void requestMultiplePermissions() {
    Dexter.withActivity(this)
            .withPermissions(
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.ACCESS_COARSE_LOCATION)
            .withListener(new MultiplePermissionsListener() {
                @Override
                public void onPermissionsChecked(MultiplePermissionsReport report) {
                    // check if all permissions are granted
                    if (report.areAllPermissionsGranted()) {
                        Toast.makeText(getApplicationContext(), "Todas as permissões aceites!", Toast.LENGTH_SHORT).show();
                    }

                    // check for permanent denial of any permission
                    if (report.isAnyPermissionPermanentlyDenied()) {
                        // show alert dialog navigating to Settings
                        openSettingsDialog();
                    }
                }

                @Override
                public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
                    token.continuePermissionRequest();
                }
            }).
            withErrorListener(new PermissionRequestErrorListener() {
                @Override
                public void onError(DexterError error) {
                    Toast.makeText(getApplicationContext(), "Algum erro ocorreu! ", Toast.LENGTH_SHORT).show();
                }
            })
            .onSameThread()
            .check();
}
  

onCreate()

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        //code for getting current location
        requestMultiplePermissions();

        tvLocation = (TextView) findViewById((R.id.tv));

        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();


        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            String gpslocation = extras.getString("GPSLocation");
            String[] latLng = gpslocation.split(",");
            double latitude = Double.parseDouble(latLng[0]);
            double longitude = Double.parseDouble(latLng[1]);
            LatLocation = new LatLng(latitude, longitude);
        }
    }
  

Ссылка на GitHub для полного MapsActivity

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

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

2. Код, которым вы поделились, не содержит никакого кода, связанного с картой… Пожалуйста, отредактируйте свой вопрос со всей информацией.

3. Я добавил метод, в котором я вызываю openSettingsDialog() код всего действия был бы слишком большим, чтобы публиковать здесь.

4. @DiogoJesus ваш код работает, вы вызываете requestMultiplePermissions() в onCreate() ?

5. @Amine Да, это так.

Ответ №1:

В openSettingDialogMethod()

удалить

 builder.show();
  

и добавьте эту строку кода

 AlertDialog alertDialog = builder.create();
alertDialog.show();
  

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

1. openSettingsDialog() находится в файле класса MainActivity

2. Нет, это в MapsActivity

3. Хорошо, в этом коде нет ничего плохого. Добавьте точку останова и попробуйте отладить свой код.

Ответ №2:

Хорошо, я это исправил. По-видимому, я хотел не этот диалог, а диалоговое окно «Открыть настройки GPS», которое теперь работает в моем приложении. Извините, что я дурачок, я новичок в Android Studio.