我有一个应用程序,我想将其设置为默认主屏幕,但我遇到了一个奇怪的问题。
我有一个允许用户选择默认主屏幕的设置。
我使用以下代码来允许他们选择默认活动:
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(不是我的)并始终使用它。
问题是,如果默认设置它永远不会切换到任何不同的东西。
我已经看过其他应用程序允许你这样做,所以我错过了一些东西,我只是不知道是什么。
我在三星Galaxy S4上测试了这一点,API级别设置为14。
答案 0 :(得分:3)
好的,我找到了问题的答案。
答案在这里: http://www.trustydroid.com/2014/05/19/force-show-default-app-chooser-dialog/
您应该记住的一件事是组件名称必须正确。显然在API14下,如果类名不正确,它会忽略组件(并且行为类似)。因此,它通过启用组件,启动选择器,然后禁用组件的动作。但是,它永远不会保存新的默认值。
在我尝试在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);
答案 1 :(得分:1)
如果您仍然收到组件名称不正确的例外
Unhandled Exception:
Java.Lang.IllegalArgumentException: Component class FakeLauncher does not exist in com.application.name
您可以获得正确的&#34;假活动类名称&#34;在Xamarin这样:
string className = Java.Lang.Class.FromType(typeof(FakeLauncher)).Name;
组件名称可以非常随机,如下所示:md546c42bb6607ccd24974e44efa088a043.FakeLauncher