Xamarin.Forms如何打开应用位置权限页 需同时支持iOS与Android
Xamarin Forms 双端跳转应用位置权限设置页实现方案
整体思路
通过Xamarin.Forms的依赖服务(DependencyService)分别实现Android、iOS端的原生跳转逻辑,共享层统一调用即可实现双端适配。
实现步骤
1. 共享项目定义接口
在共享代码项目中新建服务接口:
public interface IPermissionSettingsOpener { /// <summary> /// 打开当前应用对应的位置权限设置页 /// </summary> void OpenAppLocationSettings(); }
2. Android端实现
在Android平台项目中新建实现类:
using Android.Content; using Xamarin.Forms; using YourAppName.Droid; // 替换为你的Android项目命名空间 [assembly: Dependency(typeof(PermissionSettingsOpener_Android))] namespace YourAppName.Droid { public class PermissionSettingsOpener_Android : IPermissionSettingsOpener { public void OpenAppLocationSettings() { var context = Android.App.Application.Context; var intent = new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings); intent.AddFlags(ActivityFlags.NewTask); var uri = Android.Net.Uri.FromParts("package", context.PackageName, null); intent.SetData(uri); context.StartActivity(intent); } } }
注:Android高版本对直接跳转权限细分页限制较多,跳转应用详情页是全版本兼容性最好的方案,用户进入后点击「权限」即可找到位置权限设置项,符合需求效果。
3. iOS端实现
在iOS平台项目中新建实现类:
using UIKit; using Xamarin.Forms; using YourAppName.iOS; // 替换为你的iOS项目命名空间 [assembly: Dependency(typeof(PermissionSettingsOpener_iOS))] namespace YourAppName.iOS { public class PermissionSettingsOpener_iOS : IPermissionSettingsOpener { public void OpenAppLocationSettings() { var settingsUrl = new NSUrl(UIApplication.OpenSettingsUrlString); UIApplication.SharedApplication.OpenUrlAsync(settingsUrl, new UIApplicationOpenUrlOptions()); } } }
注:该接口会直接跳转到当前应用的系统权限设置页,位置权限选项直接展示在页面中,和目标效果完全一致。
4. 共享层调用
需要跳转时直接在共享代码中调用即可:
DependencyService.Get<IPermissionSettingsOpener>()?.OpenAppLocationSettings();
效果示意图

内容的提问来源于stack exchange,提问作者Rajat Jaiswal
相关产品推荐
相关产品推荐

