gpt4 book ai didi

Android 在代码中设置新的默认主页

转载 作者:行者123 更新时间:2023-11-29 16:01:29 27 4
gpt4 key购买 nike

我有一个应用想设置为默认主屏幕,但我遇到了一个奇怪的问题。

我有一个允许用户选择默认主屏幕的设置。

我使用以下代码允许他们选择默认 Activity :

Intent selector = new Intent(Intent.ActionMain);
selector.AddCategory(Intent.CategoryHome);
selector.AddCategory(Intent.CategoryDefault);
selector.SetComponent(new ComponentName("android", "com.android.internal.app.ResolverActivity"));

StartActivity(selector);

当前没有设置默认值,我运行该代码并选择我的应用程序作为默认值并告诉它始终使用它。

现在,我再次运行代码,并告诉它使用不同的 Activity(不是我的)并始终使用它。

问题是,如果默认设置,它永远不会切换到任何不同的东西。

我见过其他允许您执行此操作的应用程序,所以我遗漏了一些东西,我只是不知道是什么。

我正在我的 Samsung Galaxy S4 上测试这个,API 级别设置为 14。

最佳答案

好的,我找到了问题的答案。

答案在这里: http://www.trustydroid.com/2014/05/19/force-show-default-app-chooser-dialog/

您应该记住的一件事是组件名称必须正确。显然在 API14 下,如果类名不正确,它会忽略该组件(并表现得像它一样工作)。所以它经历了启用组件、启动选择器、然后禁用组件的 Action 。但是,它从不保存新的默认值。

在我尝试在 API19 下编译后,操作系统抛出了一个异常,这导致我解决了它工作时遇到的问题(这是一个不正确的类名)。

一旦我弄清楚了,它就完全按照我的要求做了。

为了完整起见,这里是代码:

像这样创建一个 FakeActivity:

[Activity(Label = "FakeLauncher", Enabled = false)]
[IntentFilter(new[] { Intent.ActionMain }, Categories = new[] { Intent.CategoryHome, Intent.CategoryDefault })]
public class FakeLauncher : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);

// Create your application here
}
}

然后在任何你想更改默认主页的地方运行此代码:

 ComponentName componentName = new ComponentName(Application.PackageName, "<fake activity class name>");
PackageManager.SetComponentEnabledSetting(componentName, Android.Content.PM.ComponentEnabledState.Enabled, Android.Content.PM.ComponentEnableOption.DontKillApp);

Intent tempIntent = new Intent(Intent.ActionMain);
tempIntent.AddCategory(Intent.CategoryHome);

StartActivity(tempIntent);

PackageManager.SetComponentEnabledSetting(componentName, Android.Content.PM.ComponentEnabledState.Disabled, Android.Content.PM.ComponentEnableOption.DontKillApp);

关于Android 在代码中设置新的默认主页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24381776/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com