Я не знаю, насколько это вам поможет;как это не в kotlin
.Но я реализовал это во многих проектах следующим образом. Надеюсь, это поможет вам получить хоть какие-то подсказки.
Объявления класса:
private static String[] PERMISSIONS = {Manifest.permission.READ_PHONE_STATE, Manifest.permission.PROCESS_OUTGOING_CALLS};
public int ALL_PERMISSIONS = 0;
public boolean CheckNoPermission = false;
Теперь в OnCreate:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
{
ALL_PERMISSIONS = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE);
ALL_PERMISSIONS = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.PROCESS_OUTGOING_CALLS);
// its below marshmallow
// no need to ask permissions in this case
// do the things here directly
// START YOUR ACTIVITY HERE....
}
else
{
// its marshmallow or above
// have to ask permissions in this case
// lets check if user already allowed the permissions in previous run
for(int x = 0; x < PERMISSIONS.length; x++)
{
String ThisPermission = PERMISSIONS[x];
if (checkSelfPermission(ThisPermission) != PackageManager.PERMISSION_GRANTED)
{
CheckNoPermission = true;
break;
}
}
// even if any permission is not granted then re-request all permissions;
// re-requesting all permissions will only request denied permissions only
if(CheckNoPermission)
{
// request all permissions one by one in array
ActivityCompat.requestPermissions(MainActivity.this, PERMISSIONS, ALL_PERMISSIONS);
}
else
{
// user has already granted all the permissions in previous run
// do the things here directly
// START YOUR ACTIVITY HERE....
}
}
Теперь проверка результатов разрешений вне onCreate:
// if permissions are requested; check for user approvals :
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults.length == 2)
{
Boolean IsAllPermissions = true;
// Yes need to check all permissions again as user may have denied any of the permission
for(int p = 0; p < grantResults.length; p++)
{
if (grantResults[p] != PackageManager.PERMISSION_GRANTED)
{
IsAllPermissions = false;
break;
}
}
if(IsAllPermissions)
{
// user has granted all the permissions in this run
// do the things here ...
// START YOUR ACTIVITY HERE....
}
else
{
// user has not granted all the permissions in this run
// so do what you want to do here in such case ...
}
}
else
{
// missmatch in number of permissions in result
}
}
Документация Android по onRequestPermissionsResult Объясняется здесь ... Надеюсь, это поможет вам или кому-то еще
Сводка onRequestPermissionsResult
:
requestCode
- этоне на что обратить внимание;для уровня приложения permissions
- это массив всех разрешений, запрошенных этим запросом. Код grantResults
- это массив того, что пользователь сделал с каждым запрошенным нами разрешением.с этим requestCode
requestCode нечего проверять, и он не имеет ничего общего с