Intereting Posts
Как установить несколько тегов на кнопку? Android: Поверните анимацию, верните ее в реальное состояние после окончания анимации? Как я могу сортировать мой Arraylist по алфавиту? (Java) Назначить статический IP-адрес для Wi-Fi сети на Android 3.x и 4.x Панель прогресса, когда медиа-плеер готовится Использование тегов фрагментов Слушатель уже используется (сервисное обнаружение) Показать параметры меню на панели инструментов для Activity содержит вкладки как фрагмент Изменить цвет границы edittext Android ConnectivityManager не видит разрешения ACCESS_NETWORK_STATE GpsStatus.Listener работает только при включенном GPS Привязка данных android к андроиду: фоновый атрибут с использованием строкового цветового кода Вызов Gradle «успешно завершается с 1 ошибкой» на Ubuntu 13.10 Android, canvas: Как очистить (удалить содержимое) холста (= растровые изображения), живущего в surfaceView? Звук андроидного потока на сервер

Добавить информацию о решении для менеджера пакетов 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));