2016-09-26 12 views
1

Ich habe ein Problem. Wenn ich versuche, meine Galerie auf verschiedenen Telefonen zu öffnen, funktioniert es nicht.Get Paketname des Standardbildes openner

Nun, was ich tun möchte, ist Paketnamen für die Standard-Galerie-Opener-App zu bekommen, damit ich es in meinem Code verwenden kann. Wie kann ich das programmatisch machen?

Hier ist, wie verwende ich bei Tests auf Nexus läuft 5.

Resources resources = InstrumentationRegistry.getTargetContext().getResources(); 
     Uri imageUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + 
       resources.getResourcePackageName(R.drawable.ic_launcher) + '/' + 
       resources.getResourceTypeName(R.drawable.ic_launcher) + '/' + 
       resources.getResourceEntryName(R.drawable.ic_launcher)); 
     Intent resultData = new Intent(); 
     resultData.setData(imageUri); 
     Instrumentation.ActivityResult result = new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData); 
     intending(toPackage("com.google.android.apps.photos")).respondWith(result); 
     //Click the select button 
     onView(withId(R.id.register_image)).perform(click()); 
     threadSleep(MILISECONDS_TIMEOUT); 
     onView(withText("From Gallery")).perform(click()); 
     threadSleep(MILISECONDS_TIMEOUT); 
     Spoon.screenshot(getActivityInstance(), "picture_selected"); 

Grundsätzlich alles, was ich tun müssen, ist für Bilder Paket Namen der Anwendung zu bekommen.

Antwort

2

Also, wollen Sie so etwas wie dies zu tun:

utils Klasse erstellen und fügen Sie die folgende Methode:

public static String getPackageForGalery() { 
      Intent mainIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      mainIntent.setType("image/*"); 
      List<ResolveInfo> pkgAppsList = getApplicationContext().getPackageManager().queryIntentActivities(mainIntent, PackageManager.GET_RESOLVED_FILTER); 
      int size = pkgAppsList.size(); 
      for (ResolveInfo infos : pkgAppsList) { 
       return infos.activityInfo.processName; 

      } 
      return null; 
     } 

nun in Ihrem Code, dies tun:

Resources resources = InstrumentationRegistry.getTargetContext().getResources(); 
     Uri imageUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + 
       resources.getResourcePackageName(R.drawable.ic_launcher) + '/' + 
       resources.getResourceTypeName(R.drawable.ic_launcher) + '/' + 
       resources.getResourceEntryName(R.drawable.ic_launcher)); 
     Intent resultData = new Intent(); 
     resultData.setData(imageUri); 
     Instrumentation.ActivityResult result = new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData); 
     intending(toPackage(YourUtilsClass.getPackageForGalery())).respondWith(result); 
     //Click the select button 
     onView(withId(R.id.register_image)).perform(click()); 
     threadSleep(MILISECONDS_TIMEOUT); 
     onView(withText("From Gallery")).perform(click()); 
     threadSleep(MILISECONDS_TIMEOUT); 
     Spoon.screenshot(getActivityInstance(), "picture_selected"); 
1

PackageManager ist dein Freund hier. Speziell um eine Liste aller Anwendungen zu erhalten, die auf eine Absicht Ihres Typs warten, können Sie queryIntentActivities(Intent intent, int flags) verwenden. Dies gibt eine Liste mit übereinstimmenden Aktivitäten für Ihre bevorzugte Absicht zurück. Wenn kein Resolver gefunden wird, ist die Liste leer, was bedeuten kann, dass Ihre Absicht nicht richtig gebildet wurde.