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

ioekq8ef  于 2023-04-18  发布在  Android
关注(0)|答案(4)|浏览(155)

我需要打开我的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);

同样的例外...
你知道吗?
谢谢。

lrpiutwd

lrpiutwd1#

终于找到问题了!

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)));
ccgok5k5

ccgok5k52#

Xamarin.Essentials.AppInfo.ShowSettingsUI();

似乎起作用了。

zzoitvuj

zzoitvuj3#

通过Visual Studio和C#使用Xamarin,我也切换到了Application.Context.PackageName
我一直在寻找使用BuildConfig.ApplicationId的Java示例,但在C#中,这使我遇到了同样的问题。我们的目标不同,但我想肯定的是,你的语法让我更接近我的语法。

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

oxalkeyp4#

使用@Sylvain和@Mikish回答,
出现异常:
Android.Util.AndroidRuntimeException: 'Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.
因此,稍微修改一下答案:

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);
}

相关问题