@WendyZang 非常友好地提供了原始问题的答案,即很遗憾,您无法使用Xamarin.Essentials Launcher 启动Android 设置应用程序(更不用说深入了解您自己的应用程序的设置了)。
相反,您必须使用具有平台特定实现的依赖服务。为了帮助遇到同样问题的其他人,我想添加一个在 iOS 和 Android 上设置依赖服务的完整解决方案,它不仅可以导航到操作系统的设置应用程序,还可以导航到应用程序的设置:
在您的跨平台项目中,界面可能如下所示。您需要传入应用的 bundle-id(例如com.myCompany.myApp
):
namespace MyCoolMobileApp.Services.DependencyServices
{
public interface ISettingsAppLauncher
{
void LaunchSettingsApp(string appBundleId);
}
}
在 Android 中,您的实现可能如下所示(注意我使用的是James Montemagno 的 CurrentActivity 插件):
using System.Diagnostics;
using Android.Content;
using Plugin.CurrentActivity; // https://github.com/jamesmontemagno/CurrentActivityPlugin
using MyCoolMobileApp.Droid.Services.DependencyServices;
using MyCoolMobileApp.Services.DependencyServices;
using Xamarin.Forms;
[assembly: Dependency(typeof(SettingsAppLauncher_Android))]
namespace MyCoolMobileApp.Droid.Services.DependencyServices
{
public class SettingsAppLauncher_Android : ISettingsAppLauncher
{
public void LaunchSettingsApp(string appBundleId)
{
var intent = new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings);
intent.AddFlags(ActivityFlags.NewTask);
var uri = Android.Net.Uri.FromParts("package", appBundleId, null);
intent.SetData(uri);
CrossCurrentActivity.Current.AppContext.StartActivity(intent);
}
}
}
最后但并非最不重要的一点是,iOS 实现将是:
using System.Diagnostics;
using Foundation;
using MyCoolMobileApp.iOS.Services.DependencyServices;
using MyCoolMobileApp.Services.DependencyServices;
using UIKit;
using Xamarin.Forms;
[assembly: Dependency(typeof(SettingsAppLauncher_iOS))]
namespace MyCoolMobileApp.iOS.Services.DependencyServices
{
public class SettingsAppLauncher_iOS : ISettingsAppLauncher
{
public void LaunchSettingsApp(string appBundleId)
{
var url = new NSUrl($"app-settings:{appBundleId}");
UIApplication.SharedApplication.OpenUrl(url);
}
}
}