Oksim
Oksim

Reputation: 81

.NET MAUI open system settings

Can someone tell me how using .NET MAUI I can force the system to open system settings, or better system settings > myApp > permissions ? I am trying to write code which redirect user to settings after not allow app to use camera.

Both Android and iOS

I tried looking for something connected to Intent

Upvotes: 8

Views: 4293

Answers (2)

Turash
Turash

Reputation: 304

As an example, To navigate to Device Location Settings you have to do the following. For other settings, You need to just change the location in device-specific codes. notice the comments

in your base project

public interface ILocationSettingsService
{
    void OpenSettings();
}

Then in Android Create a new class LocationSettingsService

and add

[assembly:Microsoft.Maui.Controls.Dependency(typeof(LocationSettingsService))]

after usings.

public class LocationSettingsService : ILocationSettingsService
{
    public void OpenSettings()
    {
        Intent intent = new(Settings.ActionLocationSourceSettings); //Settings.[Your location in settings]
        intent.AddCategory(Intent.CategoryDefault);
        intent.SetFlags(ActivityFlags.NewTask);
        Platform.CurrentActivity.StartActivityForResult(intent, 0);

    }
}

And similarly in iOS, add

[assembly:Microsoft.Maui.Controls.Dependency(typeof(LocationSettingsService))]

after usings, above namespace

public class LocationSettingsService : ILocationSettingsService
{
    public void OpenSettings()
    {
        var url = new NSUrl("app-settings:"); //app-settings: your url
        if (UIApplication.SharedApplication.CanOpenUrl(url))
        {
            UIApplication.SharedApplication.OpenUrl(url);
        }
    }
}

Then in MauiProgram.cs Register platform-specific services using conditional compilation

#if ANDROID
            builder.Services.AddTransient<ILocationSettingsService, Platforms.Android.LocationSettingsService>();
#elif IOS
            builder.Services.AddTransient<ILocationSettingsService, Platforms.iOS.LocationSettingsService>();
#endif

Finally,


_locationSettingsService = IPlatformApplication.Current.Services?.GetService<ILocationSettingsService>() 
            ?? throw new InvalidOperationException("LocationSettingsService is not available.");

_locationSettingsService?.OpenSettings();

Note Make sure to replace Settings.[Your location in settings] and app-settings: your URL with the actual location in settings and URL for your app.

let me know, if you still have issues

Upvotes: 0

Gerald Versluis
Gerald Versluis

Reputation: 34103

In the APIs that are formerly known as Essentials, there is the AppInfo which allows you to open the settings page for your app.

You can use it as AppInfo.Current.ShowSettingsUI();

Read more about this in the Docs: https://learn.microsoft.com/dotnet/maui/platform-integration/appmodel/app-information?view=net-maui-7.0&tabs=ios#display-app-settings

Upvotes: 13

Related Questions