Android 如何使用PackageManager.addPreferredActivity()?
在SDK 1.5中,我使用PackageManager类使用PackageManager.addPackageToPreferred()将首选主屏幕设置为我的应用程序。在新的SDK(使用2.1)中,这已被弃用,因此我尝试使用addPreferredActivity()获得相同的结果,但它没有按预期工作 一些必要的背景。我正在编写一个锁屏替换应用程序,因此我希望主密钥启动我的应用程序(该应用程序将已经运行,因此具有禁用密钥的效果)。当用户“解锁”屏幕时,我打算恢复映射,以便一切正常 在我的AndroidManifest.xml中,我有:Android 如何使用PackageManager.addPreferredActivity()?,android,android-sdk-2.1,Android,Android Sdk 2.1,在SDK 1.5中,我使用PackageManager类使用PackageManager.addPackageToPreferred()将首选主屏幕设置为我的应用程序。在新的SDK(使用2.1)中,这已被弃用,因此我尝试使用addPreferredActivity()获得相同的结果,但它没有按预期工作 一些必要的背景。我正在编写一个锁屏替换应用程序,因此我希望主密钥启动我的应用程序(该应用程序将已经运行,因此具有禁用密钥的效果)。当用户“解锁”屏幕时,我打算恢复映射,以便一切正常 在我的Andr
<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>
<uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS">
</uses-permission>
由此产生的行为是,当我按下Home键时,应用程序选择器出现,这表明clearPackagePreferredActivities()调用工作,但我的应用程序没有作为首选添加。此外,下面日志中的第一行表示“出于意图而放弃首选活动”:
04-06 02:34:42.379:INFO/PackageManager(1017):结果集已更改,删除了Intent的首选活动{act=android.Intent.action.MAIN cat=[android.Intent.category.HOME]flg=0x10200000}类型null
04-06 02:34:42.379:INFO/ActivityManager(1017):开始活动:Intent{act=android.Intent.action.MAIN cat=[android.Intent.category.HOME]flg=0x10200000cmp=android/com.android.internal.app.ResolverActivity}
有人知道第一条日志消息是什么意思吗?也许我没有正确使用API,有什么想法吗?任何帮助都将不胜感激。如果我将
组件
阵列初始化为设备上的所有家庭应用程序,这似乎对我有效:
ComponentName[] components = new ComponentName[]
{
new ComponentName("com.intuitiveui.android", "com.intuitiveui.android.Friday"),
new ComponentName("com.android.launcher2","com.android.launcher2.Launcher")
};
我的问题是如何动态地填充它。@afonseca:我也在处理同样的问题。谢谢你的代码,我用它开始。也谢谢希蒙。我把他的答案和我的合并在一起。我已经让代码工作(在1.6和2.1更新1中)。它已经调整了一点,但2个主要的变化似乎是希蒙斯的建议和:“.Launcher”改为“com.android.Launcher.Launcher”。工作代码发布在下面 再见
PackageManager pm = getPackageManager();
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MAIN");
filter.addCategory("android.intent.category.HOME");
filter.addCategory("android.intent.category.DEFAULT");
Context context = getApplicationContext();
ComponentName component = new ComponentName(context.getPackageName(), TestReplaceHomeAppActivity.class.getName());
ComponentName[] components = new ComponentName[] {new ComponentName("com.android.launcher", "com.android.launcher.Launcher"), component};
pm.clearPackagePreferredActivities("com.android.launcher");
pm.addPreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY, components, component);
addPreferredActivity在2.2中不再工作,clearPackagePreferredActivities仍然工作,但您只能清除运行此操作的包的首选项
android google群组上有很多关于这个问题的帖子,而且google的官方立场(目前)是不向您提供超越用户偏好的方法。这个答案可能来得有点晚,但API文档称对于
clearPackagePreferredActivities
:
应用程序只能清除自己的包
因此,我认为在“恢复映射”中,您唯一能做的是:
getPackageManager().clearPackagePreferredActivities(getPackageName());
因此,清除主屏幕的默认设置。关于该问题的详细信息。希望你得到你的答案。欢迎使用Stack Overflow。@Shimon:要动态获取已安装家庭应用程序的列表,您可能需要从PackageManager.QueryInputActivities(android.content.Intent,int)开始。祝你们好运,A罗纳斯。谢谢你们,回答得很好。我希望Android文档中有更多的例子,谢谢Matt和a2ronus。非常有用。根据Android文档,“addPreferredActivity”已被弃用。
getPackageManager().clearPackagePreferredActivities(getPackageName());