У меня есть кнопка местоположения в ActionBar. При нажатии на нее будет загружена заданная функция cityLocation()
.Диалоговое окно разрешения на доступ не отображается правильно в действии
Код выполняется следующим образом
- При нажатии в первый раз он просит разрешения местонахождения
- Восприняв это работает showCity(), иначе она всплывает Тост
- Если нажата снова после того, как отвергая, она выполняет
shouldShowRequestPermissionRationale()
часть (PS. Я не нажимал не показывать)
Во всяком случае это было только второй раз, когда я нажал на кнопку, и вместо того, чтобы о f, спрашивая у меня разрешение на размещение (с флажком не показывать снова), он выполняет часть shouldShowRequestPermissionRationale()
.
Я хочу, чтобы код запрашивал разрешение на размещение с помощью флажка «Не спрашивать снова», если это разрешение было отклонено в первый раз, а затем, если я снова его отклоню (с помощью флажка), а затем щелкните элемент панели действий, то он должен запустить код MaterialDialog.Builder
.
Вот код, у меня прямо сейчас:
private void cityLocation() {
if (Build.VERSION.SDK_INT >= 23) {
if (ActivityCompat.checkSelfPermission(WeatherActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(WeatherActivity.this,
Manifest.permission.ACCESS_COARSE_LOCATION)) {
MaterialDialog dialog;
MaterialDialog.Builder builder = new MaterialDialog.Builder(this);
builder.title("Permission needed")
.content("This Action Requires the Location Setting to be enabled. Go to Settings and check the Location Permission inside the Permissions View")
.positiveText("SETTINGS")
.negativeText("CANCEL")
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
final Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + getApplicationContext().getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
startActivity(i);
}
})
.onNegative(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
dialog.dismiss();
}
});
dialog = builder.build();
dialog.show();
}
else
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
READ_COARSE_LOCATION);
} else {
showCity();
}
}
else {
showCity();
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == READ_COARSE_LOCATION
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
showCity();
}
else {
Toast.makeText(getApplicationContext() , "Denied Location Permission" , Toast.LENGTH_SHORT).show();
}
}
В ожидании решения.
Это сработало для меня. Спасибо, сэр. – Sparker0i