2014-02-07 3 views
5

Diese Frage SO ist sehr ähnlich zu dem, was ich tun möchte: How can I shadow the PackageManager with Robolectriczum Manager Robolectric Paket resolve Info hinzufügen

jedoch alle Antworten stützen sich auf ShadowApplication.setPackageManager(). In 2.2, scheint diese Methode nicht mehr zu existieren: http://robolectric.org/javadoc/org/robolectric/shadows/ShadowApplication.html

ich versuchte, nur den Paketmanager zu packen und eine Entschlossenheit Info hinzufügen:

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

Aber ohne Erfolg. Weiß jemand, wie man das macht?

Antwort

5

Intent.resolveActivity ist die ResolveInfo erwartet folgendes zu haben:

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

So basiert darauf, dass die folgenden Werke für mich in 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); 
+1

FWIW, in späteren Versionen von Robolectric kann der Paketmanager usi abgerufen werden ng 'RobolectricPackageManager packageManager = RuntimeEnvironment.getRobolectricPackageManager();' –

+0

Ich bekomme keine Bewertung von android.content.pm.ResolveInfo.toString(), sobald es trifft ResolveInfo info = new ResolveInfo(); Ich versuchte ResolveInfo info1 = ShadowResolveInfo.newResolveInfo ("Facebook", FACEBOOK_PACKAGEINFO); von https://github.com/robolectric/robolectric/blob/master/robolectric/src/test/java/org/robolectric/shadows/ShadowPackageManagerTest.java Sogar dieser warf gleichen Fehler –

+0

In Robolectric 3.4 ist dies jetzt 'ShadowPackageManager Package = shadowOf (RuntimeEnvironment.application.getPackageManager()); '. Siehe die Migrations Hinweise zur Info: http://robolectric.org/migrating/ –

0

Sie sollten die Entschlossenheit Informationen als Liste hinzufügen:

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