Xamarin的权限插件
简单的跨平台插件请求和检查权限。
想了解关于创建,签出我的的深度博客帖子。
设置
平台支持平台版本Xamarin.iOSiOS 8 +
Xamarin.AndroidAPI 14 +
Windows 10 UWP ( 测试版)10 +
*See 平台说明
生成状态:
在你的BaseActivity或者 MainActivity ( 用于 xamarin.forms ) 中指定 可以添加以下代码:publicoverridevoidOnRequestPermissionsResult(intrequestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
Android当前 Activity 设置
这个插件使用当前的Activity 插件插件来访问当前的安卓服务器。 如果 MainApplication.cs 文件未自动添加到应用程序中,请确保完成完整设置。 请仔细阅读当前的Activity 插件文档。 至少,你必须在活动方法的OnCreate中设置以下内容:Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, bundle);
iOS
你必须将信息添加到你的info.plist. 中,然后阅读安全和隐私指南,你需要添加这些信息,才能使用。
由于API使用情况,需要添加日历权限:(NSCalendarsUsageDescription
Needs Calendar Permission
即使你的应用程序可能根本不使用日历。 我寻找未来的解决方法。
API用法
从任何项目或者PCL中调用 CrossPermissions.Current 以获取对api的访问权限。
应显示请求原理/// /// Request to see if you should show a rationale for requesting permission/// Only on Android/// /// True or false to show rationale/// Permission to check.Task ShouldShowRequestPermissionRationaleAsync(Permissionpermission);
CheckPermissionStatus/// /// Determines whether this instance has permission the specified permission./// /// true if this instance has permission the specified permission; otherwise, false./// Permission to check.Task CheckPermissionStatusAsync(Permissionpermission);
RequestPermissions/// /// Requests the permissions from the users/// /// The permissions and their status./// Permissions to request.Task> RequestPermissionsAsync(paramsPermission[] permissions);
运行
你可以将它与Geolocator插件一起使用:try{
varstatus=awaitCrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location);
if (status!=PermissionStatus.Granted)
{
if(awaitCrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location))
{
awaitDisplayAlert("Need location", "Gunna need that location", "OK");
}
varresults=awaitCrossPermissions.Current.RequestPermissionsAsync(Permission.Location);
//Best practice to always check that the key existsif(results.ContainsKey(Permission.Location))
status=results[Permission.Location];
}
if (status==PermissionStatus.Granted)
{
varresults=awaitCrossGeolocator.Current.GetPositionAsync(10000);
LabelGeolocation.Text="Lat: "+results.Latitude+" Long: "+results.Longitude;
}
elseif(status!=PermissionStatus.Unknown)
{
awaitDisplayAlert("Location Denied", "Can not continue, try again.", "OK");
}
}catch (Exceptionex)
{
LabelGeolocation.Text="Error: "+ex;
}
可用权限/// /// Permission group that can be requested/// publicenumPermission{
/// /// The unknown permission only used for return type, never requested/// Unknown,
/// /// Android: Calendar/// iOS: Calendar (Events)/// UWP: None/// Calendar,
/// /// Android: Camera/// iOS: Photos (Camera Roll and Camera)/// UWP: None/// Camera,
/// /// Android: Contacts/// iOS: AddressBook/// UWP: ContactManager/// Contacts,
/// /// Android: Fine and Coarse Location/// iOS: CoreLocation (Always and WhenInUse)/// UWP: Geolocator/// Location,
/// /// Android: Microphone/// iOS: Microphone/// UWP: None/// Microphone,
/// /// Android: Phone/// iOS: Nothing/// UWP: None/// Phone,
/// /// Android: Nothing/// iOS: Photos/// UWP: None/// Photos,
/// /// Android: Nothing/// iOS: Reminders/// UWP: None/// Reminders,
/// /// Android: Body Sensors/// iOS: CoreMotion/// UWP: Device Access Sensor Class/// Sensors,
/// /// Android: Sms/// iOS: Nothing/// UWP: None/// Sms,
/// /// Android: External Storage/// iOS: Nothing/// UWP: None/// Storage/// /// Android: Microphone/// iOS: Speech/// UWP: None/// Speech
}
重要 Android:
你仍然需要在你的AndroidManifest.xml 中请求权限。 也确保你的MainApplication.cs 从CurrentActivity插件中正确设置。 Windows 10 UWP
UWP有一组受支持的权限。 你可以看到文档 上面,但目前支持: 联系人,位置和传感器。贡献者icon,感谢 Jérémie。
谢谢!许可证
在主 repo 许可下许可( MIT )
希望支持这里项目?