You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI应用中如何打开设备系统设置及特定设置板块?

在.NET MAUI中打开系统设置及特定设置板块的实现方法

AppInfo.Current.ShowSettingsUI()仅能打开应用自身的设置页面,要实现全平台打开系统全局设置或特定板块,需要通过平台特定代码来完成,以下是具体实现方案:

一、打开系统设置主界面

Android

直接通过Intent启动系统设置主界面:

using Android.Content;
using Microsoft.Maui.ApplicationModel;

public static void OpenSystemSettings()
{
    var intent = new Intent(Android.Provider.Settings.ActionSettings);
    intent.AddFlags(ActivityFlags.NewTask);
    Platform.CurrentActivity.StartActivity(intent);
}

iOS

调用系统URL Scheme打开设置:

using UIKit;

public static void OpenSystemSettings()
{
    UIApplication.SharedApplication.OpenUrl(new NSUrl(UIApplication.OpenSettingsUrlString));
}

Windows

通过ms-settings:协议启动设置应用:

using Windows.System;

public static async Task OpenSystemSettings()
{
    await Launcher.LaunchUriAsync(new Uri("ms-settings:"));
}

二、封装跨平台调用

为了在MAUI项目中统一调用,可通过依赖服务封装:

  1. 定义共享接口:
public interface ISystemSettingsService
{
    void OpenSystemSettings();
    Task OpenSpecificSettingsAsync(SettingsType type);
}

public enum SettingsType
{
    Network,
    Display,
    Bluetooth
    // 可根据需求扩展其他设置类型
}
  1. 各平台实现该接口,然后在MauiProgram.cs中注册服务(可通过条件编译区分平台):
#if ANDROID
builder.Services.AddSingleton<ISystemSettingsService, AndroidSystemSettingsService>();
#elif IOS
builder.Services.AddSingleton<ISystemSettingsService, iOSSystemSettingsService>();
#elif WINDOWS
builder.Services.AddSingleton<ISystemSettingsService, WindowsSystemSettingsService>();
#endif

三、打开特定设置板块

Android

使用对应Intent Action跳转至指定设置页面:

public void OpenSpecificSettings(SettingsType type)
{
    string action = type switch
    {
        SettingsType.Network => Android.Provider.Settings.ActionWirelessSettings,
        SettingsType.Display => Android.Provider.Settings.ActionDisplaySettings,
        SettingsType.Bluetooth => Android.Provider.Settings.ActionBluetoothSettings,
        _ => Android.Provider.Settings.ActionSettings
    };

    var intent = new Intent(action);
    intent.AddFlags(ActivityFlags.NewTask);
    Platform.CurrentActivity.StartActivity(intent);
}

iOS

需先在Info.plist中添加允许查询的URL Scheme:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>App-Prefs</string>
</array>

然后通过对应URL跳转:

public async Task OpenSpecificSettingsAsync(SettingsType type)
{
    string url = type switch
    {
        SettingsType.Network => "App-Prefs:root=WIFI",
        SettingsType.Display => "App-Prefs:root=DISPLAY&path=DISPLAY",
        SettingsType.Bluetooth => "App-Prefs:root=Bluetooth",
        _ => UIApplication.OpenSettingsUrlString
    };

    if (UIApplication.SharedApplication.CanOpenUrl(new NSUrl(url)))
    {
        await UIApplication.SharedApplication.OpenUrlAsync(new NSUrl(url));
    }
}

Windows

使用ms-settings:的子协议跳转:

public async Task OpenSpecificSettingsAsync(SettingsType type)
{
    string uri = type switch
    {
        SettingsType.Network => "ms-settings:network",
        SettingsType.Display => "ms-settings:display",
        SettingsType.Bluetooth => "ms-settings:bluetooth",
        _ => "ms-settings:"
    };

    await Launcher.LaunchUriAsync(new Uri(uri));
}

内容的提问来源于stack exchange,提问作者Abhishek Drolia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 05:42:49