获取默认图片开启器的包名
Get package name of default image 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");
基本上,我需要做的就是获取图像应用程序的包名。
PackageManager 是你的朋友。专门用于获取所有侦听您可以使用的类型意图的应用程序的列表
queryIntentActivities(Intent intent, int flags)。此 returns 一个匹配您的意图的活动列表,从最喜欢的位置排序。如果没有匹配的解析器,列表将为空,这可能意味着您的意图格式不正确。
所以,你会想做这样的事情:
创建实用程序 class 并添加以下方法:
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");
我有问题。当 运行 我在不同的手机上进行测试时,尝试打开图库时无法正常工作。
现在,我想要做的是获取默认图库开启器应用程序的包名称,以便我可以在我的代码中使用它。我如何以编程方式执行此操作?
下面是我在 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");
基本上,我需要做的就是获取图像应用程序的包名。
PackageManager 是你的朋友。专门用于获取所有侦听您可以使用的类型意图的应用程序的列表 queryIntentActivities(Intent intent, int flags)。此 returns 一个匹配您的意图的活动列表,从最喜欢的位置排序。如果没有匹配的解析器,列表将为空,这可能意味着您的意图格式不正确。
所以,你会想做这样的事情:
创建实用程序 class 并添加以下方法:
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");