删除活动作为默认启动器

我将我的活动设置为默认启动器,以拦截主页按钮点击,如下所示:

        

当我的活动启动ExampleActivity ,如果我单击主页键,系统会提示我选择。 如果我选择将其设为我的默认设置并选择我的活动,那么我会陷入我的活动中。

问题是,当我离开活动时,我尝试从默认启动器中删除我的活动,但是不成功。

我努力了:

 ComponentName componentName = new ComponentName( "com.example.exampleactivity", "com.example.exampleactivity.class"); pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP); 

和:

 PackageManager pm = getActivity().getPackageManager(); ComponentName name = new ComponentName(this, "com.example.exampleactivity.class"); pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); 

但我对家的称号从未被删除。

有没有人有办法解决上述问题?

我只是不希望主页按钮成为特定活动的默认设置,而不是我的整个应用程序。 当我离开活动时,应将其删除并恢复为默认值。

如果您的应用程序正在清除其默认值,您只需致电:

 getPackageManager().clearPackagePreferredActivities(getPackageName()); 

然后,为了显示选择使用哪个启动器的对话框,请使用:

 final Intent intent=new Intent(); intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); 

此解决方案是一种巧妙的方法: 清除和设置默认的主应用程序

onResume()中的代码基本上是这样的:

  ComponentName componentName = new ComponentName(MyActivity.this, FakeHome.class); if (!isMyLauncherDefault()) { Log.e(TAG, "MyActivity is not default home activity!"); // toggle fake activity PackageManager pm = getPackageManager(); int flag = ((pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED : PackageManager.COMPONENT_ENABLED_STATE_ENABLED); pm.setComponentEnabledSetting(componentName, flag, PackageManager.DONT_KILL_APP); // start home activity to enable chooser Intent selector = new Intent(Intent.ACTION_MAIN); selector.addCategory(Intent.CATEGORY_HOME); startActivity(selector); } 

并且方法isMyLauncherDefault()取自这里: 如何检查我的应用程序是否是默认启动器

您无法覆盖主键的行为以适合您的应用程序; 这是Google的设计决定,以确保用户始终可以返回静态位置。 可能有一些方法(如果它们仍然存在),但它们是应用程序不应该依赖的意外错误。

简短的回答:你可以拥有除主页键之外的任何键。

看看android.permission.SET_PREFERRED_APPLICATIONS权限。 另外这个方法http://developer.android.com/reference/android/content/pm/PackageManager.html#clearPackagePreferredActivities(java.lang.String)