我需要打开我的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);
同样的例外......
有什么想法吗?
感谢。
答案 0 :(得分:6)
我终于找到了问题!
在
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)));
答案 1 :(得分:2)
通过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)));
答案 2 :(得分:0)
使用@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);
}
答案 3 :(得分:0)
Xamarin.Essentials.AppInfo.ShowSettingsUI();似乎有效。