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.");
                }
            }
예제 #2
0
        //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);
        }
예제 #3
0
        private void AddPermission(PermissionRequestCode code)
        {
            INativeSDK native = this as INativeSDK;

            if (!native.HasPermisison(code))
            {
                mPermissionList.Add(code);
            }
        }
예제 #4
0
        //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);
        }
예제 #5
0
 public bool HasPermisison(PermissionRequestCode permission)
 {
     return(false);
 }
예제 #6
0
 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);
            }
예제 #8
0
 /// <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));
 }
예제 #9
0
 bool INativeSDK.HasPermisison(PermissionRequestCode permission)
 {
     return(CallMethod <AndroidJavaObject, bool>(mNative, "checkPermission", (int)permission));
 }
예제 #10
0
 bool INativeSDK.HasPermisison(PermissionRequestCode permission)
 {
     return(hasPermission((int)permission));
 }