Можем ли мы попросить одно и то же разрешение во время выполнения в другом месте в Android?
У меня есть навигационный ящик. В навигационном ящике я делаю надуть фрагмент. В первом фрагменте я спрашиваю пользователя для разрешения времени выполнения. но во втором фрагменте я хочу сделать так, чтобы он снова запрашивал у пользователя такое же разрешение. но в моём случае сначала фрагмент спроси разрешения. но во втором фрагменте он не просит разрешения. так может кто-нибудь сказать мне, в чем проблема? потому что я использую один и тот же код в обеих ситуациях.
Это мой первый фрагмент кода:-
if (checkPermission(Manifest.permission.ACCESS_FINE_LOCATION, getActivity().getApplicationContext(), getActivity())) {
IsConsumed = 1;
fetchLocationData();
} else {
requestPermission(Manifest.permission.ACCESS_FINE_LOCATION, PERMISSION_REQUEST_CODE_LOCATION, getActivity().getApplicationContext(), getActivity());
}
public void requestPermission(String strPermission, int perCode, Context _c, Activity _a) {
if (ActivityCompat.shouldShowRequestPermissionRationale(_a, strPermission)) {
Toast.makeText(getActivity(), "GPS permission allows us to access location data. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
} else {
ActivityCompat.requestPermissions(_a, new String[]{strPermission}, perCode);
}
}
public static boolean checkPermission(String strPermission, Context _c, Activity _a) {
int result = ContextCompat.checkSelfPermission(_c, strPermission);
if (result == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
return false;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSION_REQUEST_CODE_LOCATION:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
fetchLocationData();
} else {
Toast.makeText(getActivity(), "Permission Denied, You cannot access location data.", Toast.LENGTH_LONG).show();
}
break;
}
}
Я использую тот же код во втором фрагменте. но он не запрашивает разрешения. Я попытался распечатать журнал, он переходит в условие if() и распечатать журнал. но он не просит разрешения.
1 ответ
public static boolean checkPermission(String strPermission, Context _c, Activity _a) {
int result = ContextCompat.checkSelfPermission(_c, strPermission);
if (result == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
// user allowed permission. we should not ask for permission.
return false;
}
}
Это ваша функция, которая проверяет, предоставил ли пользователь разрешение или нет.
В первом фрагменте, если пользователь разрешил это разрешение, будет выполняться код, представленный в разделе else.
Вы можете вызвать функцию requestPermission в блоке else, чтобы снова запросить разрешение (не рекомендуется снова запрашивать такое же разрешение)
public static boolean checkPermission(String strPermission, Context _c, Activity _a) {
int result = ContextCompat.checkSelfPermission(_c, strPermission);
if (result == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
1);
return false;
}
}
Затем вы вызываете функцию ниже для обработки щелчков Allow и Deny.
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case 1: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
//Called when Allowed
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
//Called when denied
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}