我将我的活动设置为默认启动器,以拦截主页按钮点击,如下所示:
<activity
android:name=".ExampleActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
当我的活动ExampleActivity
启动时,如果我点击 home 键,系统会提示我选择。如果我选择将其设为我的默认并选择我的活动,我会根据需要陷入我的活动中。
问题是,当我离开活动时,我尝试从默认启动器中删除我的活动,但是没有成功。
我试过了:
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);
但我永远不会删除 home 的名称。
有没有人有办法解决上述问题?
我只是不希望主页按钮成为特定活动的默认设置,而不是我的整个应用程序。当我离开活动时,应将其删除并恢复为默认值。
答案 0 :(得分:14)
如果您的应用是清除其默认值,则只需拨打:
即可getPackageManager().clearPackagePreferredActivities(getPackageName());
然后,为了显示选择使用哪个启动器的对话框,请使用:
final Intent intent=new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
答案 1 :(得分:2)
这个解决方案是一种聪明的方法: Clearing and setting the default home application
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()取自此处: How to check if my application is the default launcher
答案 2 :(得分:1)
您无法覆盖主键的行为以适合您的应用;这是Google的设计决定,以确保用户始终可以返回静态位置。可能有一些方法(如果它们仍然存在)但它们是应用程序不应该依赖的意外错误。
简短的回答:你可以拥有除主页键之外的任何键。
答案 3 :(得分:1)
查看android.permission.SET_PREFERRED_APPLICATIONS
权限。这个方法也是http://developer.android.com/reference/android/content/pm/PackageManager.html#clearPackagePreferredActivities(java.lang.String)