private async Task <bool> CheckAndRequestPermissionAsync() { Microphone mic = new Microphone(); // ios status=unknown at first, and denied after has been denied // android status=denied at first if (await mic.CheckStatusAsync() == PermissionStatus.Granted) { return(true); } // first make a request var status = await mic.RequestAsync(); if (status == PermissionStatus.Granted) { return(true); } // android allows retry, ios does not if (permissionRequestInfo.IsRetryAllowedForDeniedMicrophone()) { await DisplayAlert(AppResources.PermissionRationaleTitle, AppResources.PermissionRationaleMessage, AppResources.PermissionRationaleDismiss); } else { // ios: denied, android: denied and do not ask again -> user needs to fix manually await DisplayAlert(AppResources.PermissionDeniedTitle, AppResources.PermissionDeniedMessage, AppResources.PermissionDeniedDismiss); } return(false); }