从Xamarin Android应用程序打开应用程序设置页面

3

我需要打开我的Xamarin Android应用程序的应用设置页面。

使用Java,正确的方法似乎是:

startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
              Uri.parse("package:" + BuildConfig.APPLICATION_ID)));

因此,我尝试使用C#:

StartActivity(new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings,
              Android.Net.Uri.Parse("package:" + BuildConfig.ApplicationId)));

这不会有任何作用......

我试过没有Uri参数,但那样会抛出异常:

Android.Content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.APPLICATION_DETAILS_SETTINGS }

我也尝试过

StartActivityForResult(
    new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings), 0);

同样的异常...

有任何想法吗?

谢谢。

4个回答

15

我终于找到了问题!

StartActivity(new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings,
          Android.Net.Uri.Parse("package:" + BuildConfig.ApplicationId)));

这是

BuildConfig.ApplicationId

那样行不通...

在 Xamarin 中,正确的调用(或者至少对我有效的)是这样的:

StartActivity(new Intent(
    Android.Provider.Settings.ActionApplicationDetailsSettings,
    Android.Net.Uri.Parse("package:"+ Android.App.Application.Context.PackageName)));

有好的信息。只有有人知道如何进一步深入到这个“应用程序信息”菜单吗?我想进入“权限”菜单,如果可能的话。进一步选择其列表中的项目。 - axa

10
Xamarin.Essentials.AppInfo.ShowSettingsUI(); 

看起来可以工作。


3

使用Visual Studio和C#通过Xamarin,我也转到了Application.Context.PackageName

我不断发现Java示例使用BuildConfig.ApplicationId,但在C#中,这导致我遇到了与您相同的问题。我们的目标不同,但我想确认您的语法使我向我的目标迈进了一步。

using Android.App;
using Android.Net;
...
StartActivity(new Intent(
    Android.Provider.Settings.ActionApplicationDetailsSettings, 
    Uri.Parse("package:" + Application.Context.PackageName)));

1

使用@Sylvain和@Mikish的答案,

我遇到了一个异常:

Android.Util.AndroidRuntimeException: '从Activity上下文之外调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。

因此稍微修改答案:

public void OpenSettings()
{
    Intent intent = new Intent(
                    Android.Provider.Settings.ActionApplicationDetailsSettings,
                    Android.Net.Uri.Parse("package:" + Application.Context.PackageName));
    intent.AddFlags(ActivityFlags.NewTask);

    Application.Context.StartActivity(intent);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接