Xamarin.Android | 获取常见的10种系统权限
@[toc]
前言
在 Xamarin.Android 中获取权限的方法与 Android 原生开发类似。可以通过请求运行时权限来获取需要的权限。
本文将演示 10 个常见权限的示例代码。
动态申请权限
文件读取权限
if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.ReadExternalStorage) != Permission.Granted)
{
ActivityCompat.RequestPermissions(this, new string[] {
Manifest.Permission.ReadExternalStorage }, 1);
}
文件写入权限
if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage) != Permission.Granted)
{
ActivityCompat.RequestPermissions(this, new string[] {
Manifest.Permission.WriteExternalStorage }, 1);
}
相机权限
if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.Camera) != Permission.Granted)
{
ActivityCompat.RequestPermissions(this, new string[] {
Manifest.Permission.Camera }, 1);
}
录音权限
if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.RecordAudio) != Permission.Granted)
{
ActivityCompat.RequestPermissions(this, new string[] {
Manifest.Permission.RecordAudio }, 1);
}
定位权限
if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.AccessFineLocation) != Permission.Granted)
{
ActivityCompat.RequestPermissions(this, new string[] {
Manifest.Permission.AccessFineLocation }, 1);
}
电话权限
if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.CallPhone) != Permission.Granted)
{
ActivityCompat.RequestPermissions(this, new string[] {
Manifest.Permission.CallPhone }, 1);
}
网络访问权限
if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.Internet) != Permission.Granted)
{
ActivityCompat.RequestPermissions(this, new string[] {
Manifest.Permission.Internet }, 1);
}
发送短信权限
if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.SendSms) != Permission.Granted)
{
ActivityCompat.RequestPermissions(this, new string[] {
Manifest.Permission.SendSms }, 1);
}
读取联系人权限
if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.ReadContacts) != Permission.Granted)
{
ActivityCompat.RequestPermissions(this, new string[] {
Manifest.Permission.ReadContacts }, 1);
}
后台运行权限
if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.ForegroundService) != Permission.Granted)
{
ActivityCompat.RequestPermissions(this, new string[] {
Manifest.Permission.ForegroundService }, 1);
}
处理权限请求结果
当应用程序请求权限时,需要处理用户的响应以确定他们是否授予了该权限。
首先,添加以下方法来处理用户权限请求结果:
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1)
{
if (grantResults.Length > 0 && grantResults[0] == Permission.Granted)
{
// 权限授予成功
}
else
{
// 权限授予失败
}
}
}
在请求权限时,系统将向用户显示一个对话框,询问他们是否允许您的应用程序访问特定的权限。如果用户授予权限,系统将调用 OnRequestPermissionsResult 方法,并向其传递 requestCode,permissions 和 grantResults 参数。requestCode 参数是您在请求权限时指定的代码。permissions 参数是请求的权限数组。grantResults 参数包含授予权限的结果。如果用户授予了所有请求的权限,grantResults 数组将包含 Permission.Granted。如果用户拒绝了任何请求的权限,grantResults 数组将包含 Permission.Denied。
在 OnRequestPermissionsResult 方法中,我们检查 requestCode 是否等于我们在请求权限时指定的代码。如果是,我们检查 grantResults 数组中的第一个元素,以确定用户是否授予了请求的权限。如果授予了权限,我们可以执行相应的操作。否则,我们可以选择以某种方式告知用户他们必须授予权限才能使用我们的应用程序。
注意:在实际应用中,您可能需要请求多个权限。在这种情况下,您可以使用不同的 requestCode 值来区分请求,例如 2,3,4 等。