This vlog demonstrates how to request the user for location permissions in runtime,
This code is applicable for Android version 23 (Marshmallow 6.0)
The source code is as shown below and if from James Montemagno post about runtime permissions
https://blog.xamarin.com/requesting-runtime-permissions-in-android-marshmallow/
#region RuntimePermissions async Task TryToGetPermissions() { if ((int)Build.VERSION.SdkInt >= 23) { await GetPermissionsAsync(); return; } } const int RequestLocationId = 8889; readonly string[] PermissionsGroupLocation = { //TODO add more permissions Manifest.Permission.AccessCoarseLocation, Manifest.Permission.AccessFineLocation, }; async Task GetPermissionsAsync() { const string permission = Manifest.Permission.AccessFineLocation; if (CheckSelfPermission(permission) == (int)Android.Content.PM.Permission.Granted) { //TODO change the message to show the permissions name Toast.MakeText(this, "Location permissions granted", ToastLength.Short).Show(); return; } if (ShouldShowRequestPermissionRationale(permission)) { //set alert for executing the task AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.SetTitle("Location Permissions"); alert.SetMessage("The application needs your location permission to continue"); alert.SetPositiveButton("Request Permissions", (senderAlert, args) => { RequestPermissions(PermissionsGroupLocation, RequestLocationId); }); alert.SetNegativeButton("Cancel", (senderAlert, args) => { Toast.MakeText(this, "Cancelled!", ToastLength.Short).Show(); }); Dialog dialog = alert.Create(); dialog.Show(); return; } RequestPermissions(PermissionsGroupLocation, RequestLocationId); } public override async void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) { switch (requestCode) { case RequestLocationId: { if (grantResults[0] == (int)Android.Content.PM.Permission.Granted) { Toast.MakeText(this, "Location permissions granted", ToastLength.Short).Show(); } else { Toast.MakeText(this, "Location permissions denied", ToastLength.Short).Show(); //Permission Denied } } break; } //base.OnRequestPermissionsResult(requestCode, permissions, grantResults); } #endregion