Snippet to show how to set a preferred activity for an intent filter
PackageManager pm = BrassyApplication.getApplication().getPackageManager();
IntentFilter f = new IntentFilter("android.intent.action.MAIN");
f.addCategory("android.intent.category.HOME");
f.addCategory("android.intent.category.DEFAULT");
ComponentName cn = new ComponentName("com.ghostwan.custombrowser", "com.ghostwan.custombrowser.MainActivity");
try {
Method replacePreferredActivity = pm.getClass().getMethod("replacePreferredActivity", new Class[]{IntentFilter.class, int.class, ComponentName[].class, ComponentName.class});
replacePreferredActivity.setAccessible(true);
ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
Method getHomeActivities = pm.getClass().getMethod("getHomeActivities", new Class[]{(List.class)});
getHomeActivities.setAccessible(true);
getHomeActivities.invoke(pm, homeActivities);
ComponentName[] mHomeComponentSet = new ComponentName[homeActivities.size()];
for (int i = 0; i < homeActivities.size(); i++) {
final ResolveInfo candidate = homeActivities.get(i);
final ActivityInfo info = candidate.activityInfo;
ComponentName activityName = new ComponentName(info.packageName, info.name);
mHomeComponentSet[i] = activityName;
}
replacePreferredActivity.invoke(pm, f, IntentFilter.MATCH_CATEGORY_EMPTY, mHomeComponentSet, cn);
} catch (NoSuchMethodException e) {
ALLog.e("NoSuchMethodException", e);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}