Добавить информацию о решении для менеджера пакетов Robolectric

Этот вопрос SO очень похож на то, что я хочу сделать: как я могу скрыть PackageManager с помощью Robolectric

Тем не менее, все ответы основываются на ShadowApplication.setPackageManager (). В 2.2 этот метод больше не существует: http://robolectric.org/javadoc/org/robolectric/shadows/ShadowApplication.html

Я попытался просто захватить диспетчер пакетов и добавить информацию о разрешении:

RobolectricPackageManager packageManager = (RobolectricPackageManager) Robolectric.application.getPackageManager(); Intent intent = new Intent(Intent.ACTION_MAIN,null); intent.addCategory(Intent.CATEGORY_HOME); ResolveInfo ri = new ResolveInfo(); ActivityInfo ai = new ActivityInfo(); ai.packageName = "com.fun.test"; ri.activityInfo = ai; ri.isDefault = true; packageManager.addResolveInfoForIntent(intent, ri); 

Но безрезультатно. Кто-нибудь знает как это сделать?

Intent.resolveActivity ожидает, что ResolveInfo получит следующее:

 if (info != null) { return new ComponentName( info.activityInfo.applicationInfo.packageName, info.activityInfo.name); } 

Поэтому, основываясь на этом, для Robolectric 2.3 следующие работы:

 RobolectricPackageManager packageManager = (RobolectricPackageManager) shadowOf(Robolectric.application).getPackageManager(); Intent intent = ... //create an Intent like the one you want to resolve ResolveInfo info = new ResolveInfo(); info.isDefault = true; ApplicationInfo applicationInfo = new ApplicationInfo(); applicationInfo.packageName = "com.example"; info.activityInfo = new ActivityInfo(); info.activityInfo.applicationInfo = applicationInfo; info.activityInfo.name = "Example"; packageManager.addResolveInfoForIntent(intent, info); 

Вы должны добавить информацию о разрешении в список:

 packageManager.addResolveInfoForIntent(intent, Collections.singletonsList(ri));