2016-09-26 2 views
1

У меня проблема. При выполнении моих тестов на разных телефонах при попытке открыть галерею он не работает.Получить полное имя по умолчанию openner

Теперь, что я хочу сделать, это получить имя пакета для браузера по умолчанию, поэтому я могу использовать его в своем коде. Как я могу сделать это программно?

Вот как я использую при выполнении тестов на Nexus 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"); 

В принципе, все что мне нужно сделать, чтобы получить имя пакета приложения для изображений.

ответ

2

Итак, вы хотите сделать что-то вроде этого:

Создать Utils класс и добавьте следующий метод:

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

Теперь в вашем коде, это сделать:

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 - ваш друг здесь. В частности, чтобы получить список всех приложений, слушающих намерение вашего типа, вы можете использовать queryIntentActivities(Intent intent, int flags). Это возвращает список соответствующих действий для вашего намерения, заказанных из наиболее предпочтительных. Если сопоставление не будет найдено, список будет пустым, что может означать, что ваше намерение не сформировано должным образом.

Смежные вопросы