在 SDK 1.5 中,我使用 PackageManager 类将首选主屏幕设置为使用 PackageManager.addPackageToPreferred() 的应用程序。在新的 SDK(使用 2.1)中,这已被弃用,所以我尝试使用 addPreferredActivity() 来获得相同的结果,但它没有按预期工作。
一些必要的背景。我正在编写一个锁屏替换应用程序,所以我希望主键启动我的应用程序(它已经在运行,因此具有禁用键的效果)。当用户“解锁”屏幕时,我打算恢复映射,以便一切正常。
在我的 AndroidManifest.xml 我有:
<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>
在我的代码中,我有以下代码段:
// Set as home activity
// This is done so we can appear to disable the Home key.
PackageManager pm = getPackageManager();
//pm.addPackageToPreferred(getPackageName());
IntentFilter filter = new IntentFilter("android.intent.action.MAIN");
filter.addCategory("android.intent.category.HOME");
filter.addCategory("android.intent.category.DEFAULT");
ComponentName[] components = new ComponentName[]
{
new ComponentName("com.android.launcher", ".Launcher")
};
Context context = getApplicationContext();
ComponentName component = new ComponentName(context.getPackageName(),
MyApp.class.getName());
pm.clearPackagePreferredActivities("com.android.launcher");
pm.addPreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY,
components, component);
结果行为是当我按下 Home 键时应用程序选择器出现,这表明 clearPackagePreferredActivities() 调用有效,但我的应用程序没有被添加为首选。此外,下面日志中的第一行说明了“放弃 Intent 的首选活动”:
04-06 02:34:42.379: INFO/PackageManager(1017): 结果集已更改,放弃 Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 } 的首选活动输入空
04-06 02:34:42.379: INFO/ActivityManager(1017): 开始活动: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=android/com. android.internal.app.ResolverActivity }
有谁知道这第一条日志消息是什么意思?也许我没有正确使用 API,有什么想法吗?任何帮助将不胜感激。