2016-09-26 74 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)。這將返回您的意向匹配活動列表從最喜歡的順序。如果沒有匹配解析器,則列表將爲空,這可能意味着您的意圖不正確。