这个问题与我想做的非常相似:如何使用 Robolectric 隐藏 PackageManager https://stackoverflow.com/questions/12902777/how-can-i-shadow-the-packagemanager-with-robolectric
然而,所有的答案都依赖于 ShadowApplication.setPackageManager()。在2.2中,这个方法似乎不再存在:http://robolectric.org/javadoc/org/robolectric/shadows/ShadowApplication.html 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)