ghostwan
2/15/2017 - 6:45 PM

Snippet to show how to set a preferred activity for an intent filter

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();
}