在实际工作中可能会遇到想把系统中某个特定的应用在程序中将自身或真其他程序设置成默认执行的程序的状况。
比如把自己的开发的Launcher设置成系统默认的Launcher。
注:
(1)这个在安卓2.2以前还是有系统的接口的,现在相应的接口已经被google废弃,不能再使用了,我也没搜集到好的办法。
(2)以下方法没有经过实际验证,仅供参考
- 应用将应用程序设置成默认应用的方法:
android SDK 1.5以前:
---------------------------------------------------------------------------------------------------------------------
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>
android SDK 1.6 ~ SDK 2.1:
---------------------------------------------------------------------------------------------------------------------
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);
android SDK 2.2 ~
---------------------------------------------------------------------------------
根据android SDK 说明,此接口已经废弃不用。
http://developer.android.com/reference/android/content/pm/PackageManager.html#addPackageToPreferred%28java.lang.String%29
- 默认设置的保存位置
保存在安卓系统以下文件中:
/data/system/packages.xml
实例:
992 <preferred-activities>
993 <item name="com.android.music/.TrackBrowserActivity" match="600000" set="2">
994 <set name="com.lenovo.leos.lephone.music/.MusicMainActivity" />
995 <set name="com.android.music/.TrackBrowserActivity" />
996 <filter>
997 <action name="android.intent.action.EDIT" />
998 <cat name="android.intent.category.DEFAULT" />
999 <type name="vnd.android.cursor.dir/track" />
1000 </filter>
1001 </item>
1002 <item name="com.android.music/.ArtistAlbumBrowserActivity" match="600000" set="2">
1003 <set name="com.lenovo.leos.lephone.music/.MusicMainActivity" />
1004 <set name="com.android.music/.ArtistAlbumBrowserActivity" />
1005 <filter>
1006 <action name="android.intent.action.PICK" />
1007 <cat name="android.intent.category.DEFAULT" />
1008 <type name="vnd.android.cursor.dir/artistalbum" />
1009 </filter>
1010 </item>
1011 <item name="com.sangfei.launcher/.Launcher" match="100000" set="2">
1012 <set name="com.android.launcher/com.android.launcher2.Launcher" />
1013 <set name="com.sangfei.launcher/.Launcher" />
1014 <filter>
1015 <action name="android.intent.action.MAIN" />
1016 <cat name="android.intent.category.HOME" />
1017 <cat name="android.intent.category.DEFAULT" />
1018 </filter>
1019 </item>
1020 <item name="com.android.music/.AlbumBrowserActivity" match="600000" set="2">
1021 <set name="com.lenovo.leos.lephone.music/.MusicMainActivity" />
1022 <set name="com.android.music/.AlbumBrowserActivity" />
1023 <filter>
1024 <action name="android.intent.action.PICK" />
1025 <cat name="android.intent.category.DEFAULT" />
1026 <type name="vnd.android.cursor.dir/album" />
1027 </filter>
1028 </item>
1029 <item name="com.android.music/.TrackBrowserActivity" match="600000" set="2">
1030 <set name="com.lenovo.leos.lephone.music/.MusicMainActivity" />
1031 <set name="com.android.music/.TrackBrowserActivity" />
1032 <filter>
1033 <action name="android.intent.action.PICK" />
1034 <cat name="android.intent.category.DEFAULT" />
1035 <type name="vnd.android.cursor.dir/track" />
1036 </filter>
1037 </item>
1038 </preferred-activities>