对此,可以参考官方文档:Permissions In Xamarin.Android。
还有一个关于此的示例,您可以在这里查看:https://github.com/xamarin/monodroid-samples/tree/master/android-m/RuntimePermissions。
如果要定义两个以上的权限,可以参考下面的代码sn-ps(这里我们要在我们的设备中读写cotacts):
/**
* Id to identify a contacts permission request.
*/
static readonly int REQUEST_CONTACTS = 1;
/**
* Permissions required to read and write contacts. Used by the ContactsFragment.
*/
static string[] PERMISSIONS_CONTACT = {
Manifest.Permission.ReadContacts,
Manifest.Permission.WriteContacts
};
public void ShowContacts (View v)
{
Log.Info (TAG, "Show contacts button pressed. Checking permissions.");
// Verify that all required contact permissions have been granted.
if (ActivityCompat.CheckSelfPermission (this, Manifest.Permission.ReadContacts) != (int)Permission.Granted
|| ActivityCompat.CheckSelfPermission (this, Manifest.Permission.WriteContacts) != (int)Permission.Granted) {
// Contacts permissions have not been granted.
Log.Info (TAG, "Contact permissions has NOT been granted. Requesting permissions.");
RequestContactsPermissions ();
} else {
// Contact permissions have been granted. Show the contacts fragment.
Log.Info (TAG, "Contact permissions have already been granted. Displaying contact details.");
ShowContactDetails ();
}
}
方法:RequestContactsPermissions
void RequestContactsPermissions ()
{
if (ActivityCompat.ShouldShowRequestPermissionRationale (this, Manifest.Permission.ReadContacts)
|| ActivityCompat.ShouldShowRequestPermissionRationale (this, Manifest.Permission.WriteContacts)) {
// 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 request has been denied previously.
Log.Info (TAG, "Displaying contacts permission rationale to provide additional context.");
// Display a SnackBar with an explanation and a button to trigger the request.
Snackbar.Make (layout, Resource.String.permission_contacts_rationale,
Snackbar.LengthIndefinite).SetAction (Resource.String.ok, new Action<View> (delegate(View obj) {
ActivityCompat.RequestPermissions (this, PERMISSIONS_CONTACT, REQUEST_CONTACTS);
})).Show ();
} else {
// Contact permissions have not been granted yet. Request them directly.
ActivityCompat.RequestPermissions (this, PERMISSIONS_CONTACT, REQUEST_CONTACTS);
}
}
方法OnRequestPermissionsResult
public override void OnRequestPermissionsResult (int requestCode, string[] permissions, Permission[] grantResults)
{
if (requestCode == REQUEST_CONTACTS) {
Log.Info (TAG, "Received response for contact permissions request.");
// We have requested multiple permissions for contacts, so all of them need to be
// checked.
if (PermissionUtil.VerifyPermissions (grantResults)) {
// All required permissions have been granted, display contacts fragment.
Snackbar.Make (layout, Resource.String.permission_available_contacts, Snackbar.LengthShort).Show ();
} else {
Log.Info (TAG, "Contacts permissions were NOT granted.");
Snackbar.Make (layout, Resource.String.permissions_not_granted, Snackbar.LengthShort).Show ();
}
} else {
base.OnRequestPermissionsResult (requestCode, permissions, grantResults);
}
}
更多详细信息,您可以查看示例:https://github.com/xamarin/monodroid-samples/tree/master/android-m/RuntimePermissions。