public static void ProcessRequestPermissionsResult(PermissionRequestCode requestCode, Permission[] grantResults) { // Received permission result System.Diagnostics.Debug.WriteLine($"ProcessRequestPermissionsResult.ProcessRequestPermissionsResult: Received response for {requestCode.ToString()} permission request."); var action = resultActions.ContainsKey(requestCode) ? resultActions[requestCode] : null; if (action == null) { System.Diagnostics.Debug.WriteLine($"ProcessRequestPermissionsResult.ProcessRequestPermissionsResult: No action mapped to requestCode"); return; } // Check if the only required permission has been granted if (grantResults.All(a => a == Permission.Granted)) { action?.Invoke(true); // Location permission has been granted, okay to retrieve the location of the device. System.Diagnostics.Debug.WriteLine($"ProcessRequestPermissionsResult.ProcessRequestPermissionsResult: {requestCode.ToString()} permission has now been granted."); } else { action?.Invoke(false); //var messageService = ServiceFactory.Resolve<IMessageService>(); System.Diagnostics.Debug.WriteLine($"ProcessRequestPermissionsResult.ProcessRequestPermissionsResult: {requestCode.ToString()} permission was NOT granted."); //messageService.DisplayAlertMessageDialog(DialogMessageTitles.Information, "Unable to fully use this feature without permission."); } }
//generate permission messages public Dictionary <string, string> GetPermissionMessages(PermissionRequestCode reqCode = PermissionRequestCode.Default) { Dictionary <string, string> messages = new Dictionary <string, string>(); string granted = "Permission Granted"; string denied = "Permission Denied"; string neverAsk = "Permission can only be granted from device application settings"; switch (reqCode) { case PermissionRequestCode.Storage: neverAsk = "Storage permission (for image orientation) can only be granted from device application settings"; break; } if (reqCode != PermissionRequestCode.Default) { granted = reqCode + " " + granted; denied = reqCode + " " + denied; } messages.Add("granted", granted); messages.Add("denied", denied); messages.Add("neverAsk", neverAsk); return(messages); }
private void AddPermission(PermissionRequestCode code) { INativeSDK native = this as INativeSDK; if (!native.HasPermisison(code)) { mPermissionList.Add(code); } }
//check if the application has been granted a permission public bool HasAccess(string permission, PermissionRequestCode reqCode = PermissionRequestCode.Default, string rationale = "Permision is necessary for optimal functionality", ToastLength toastLength = ToastLength.Short) { if ((int)Build.VERSION.SdkInt >= 23) { if (CheckSelfPermission(permission) != Permission.Granted) { if (ShouldShowRequestPermissionRationale(permission)) { Toast.MakeText(this, rationale, toastLength).Show(); } RequestPermissions(new string[1] { permission }, (int)reqCode); return(false); } } return(true); }
public bool HasPermisison(PermissionRequestCode permission) { return(false); }
bool INativeSDK.HasPermisison(PermissionRequestCode permission) { return(true); }
public static async Task <bool> CheckPermissionAndRequestIfNotGranted(Activity activity, string[] permissions, PermissionRequestCode requestCode, string reason, Action <bool> resultAction) { if (activity == null || permissions.Length == 0 || requestCode == 0) { System.Diagnostics.Debug.WriteLine("Android6PermissionsHelper.RequestLocationPermissionsIfNotGranted: missing data"); return(false); } //Only applicable to Android 6.0 runtime permission system if (Build.VERSION.SdkInt < BuildVersionCodes.M) { //Do not need to grant permission System.Diagnostics.Debug.WriteLine("Android6PermissionsHelper.RequestLocationPermissionsIfNotGranted: do not need to grant permission"); resultAction?.Invoke(true); return(true); } //Check to see if all permission are granted if (permissions.All(a => ContextCompat.CheckSelfPermission(activity, a) == Permission.Granted)) { //Permission already granted System.Diagnostics.Debug.WriteLine("Android6PermissionsHelper.RequestLocationPermissionsIfNotGranted: permission already granted"); resultAction?.Invoke(true); return(true); } //Need to request permission if (permissions.Any(a => ActivityCompat.ShouldShowRequestPermissionRationale(activity, a)) && string.IsNullOrEmpty(reason) == false) { System.Diagnostics.Debug.WriteLine("Android6PermissionsHelper.RequestLocationPermissionsIfNotGranted: Ask for permission showing a reason."); // Provide an additional rationale to the user if the permission was not granted // and the user would benefit from additional context for the use of the permission. // For example if the user has previously denied the permission. //var messageService = ServiceFactory.Resolve<IMessageService>(); //if (await messageService.DisplayAlertMessageDialogForResult("Yeah!", reason, "OK", "Cancel")) { ActivityCompat.RequestPermissions(activity, permissions, (int)requestCode); } } else { //Not the first time or not IBaseView System.Diagnostics.Debug.WriteLine("Android6PermissionsHelper.RequestLocationPermissionsIfNotGranted: Ask for permission without a reason."); ActivityCompat.RequestPermissions(activity, permissions, (int)requestCode); } if (!resultActions.ContainsKey(requestCode)) { resultActions.Add(requestCode, resultAction); } //Have not got permission - wait for OnRequestPermissionsResult return(false); }
/// <summary> /// 检查用户之前是否拒绝过某个权限 /// </summary> /// <returns><c>true</c>, if if user has refuse permission before was checked, <c>false</c> otherwise.</returns> /// <param name="code">Code.</param> public bool CheckIfUserHasRefusePermissionBefore(PermissionRequestCode code) { return(mNative.Call <bool>("checkIfUserRefuseBefore", (int)code)); }
bool INativeSDK.HasPermisison(PermissionRequestCode permission) { return(CallMethod <AndroidJavaObject, bool>(mNative, "checkPermission", (int)permission)); }
bool INativeSDK.HasPermisison(PermissionRequestCode permission) { return(hasPermission((int)permission)); }