我试图让用户从图库中选择图像,或者用相机拍照。我试过这个:
Intent imageIntent = new Intent(Intent.ACTION_GET_CONTENT);
imageIntent.setType("image/*");
startActivityForResult(Intent.createChooser(imageIntent, "Select Picture"), GET_IMAGE_REQUEST);
但它会自动显示图库,甚至不提供选择活动的选项。似乎应该有一些比this question中给出的解决方案更好的方法来实现这一目标。这真的是唯一的方法吗?
答案 0 :(得分:12)
我已经合并了一些解决方案来制作一个完整的工具,用于从图库或相机中拾取图像。这些是ImagePicker util(也在Github lib)中的功能:
<强>截图:强>
编辑:这是一个代码片段,用于将Gallery和Camera应用程序合并为Intent。 您可以在ImagePicker util(也在Github lib)
中查看完整代码public static Intent getPickImageIntent(Context context) {
Intent chooserIntent = null;
List<Intent> intentList = new ArrayList<>();
Intent pickIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePhotoIntent.putExtra("return-data", true);
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(context)));
intentList = addIntentsToList(context, intentList, pickIntent);
intentList = addIntentsToList(context, intentList, takePhotoIntent);
if (intentList.size() > 0) {
chooserIntent = Intent.createChooser(intentList.remove(intentList.size() - 1),
context.getString(R.string.pick_image_intent_text));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray(new Parcelable[]{}));
}
return chooserIntent;
}
private static List<Intent> addIntentsToList(Context context, List<Intent> list, Intent intent) {
List<ResolveInfo> resInfo = context.getPackageManager().queryIntentActivities(intent, 0);
for (ResolveInfo resolveInfo : resInfo) {
String packageName = resolveInfo.activityInfo.packageName;
Intent targetedIntent = new Intent(intent);
targetedIntent.setPackage(packageName);
list.add(targetedIntent);
}
return list;
}
答案 1 :(得分:5)
您应该在应用中执行此逻辑。从画廊中挑选图像并使用相机拍照正在使用不同的意图。
我建议您使用按钮(或任何用户界面选择操作的UI)并为这两个操作创建两个单独的方法。比方说,您创建了两个名为btnPickGallery
和btnTakePicture
的按钮。
两个按钮都会触发自己的操作,例如onBtnPickGallery
和onBtnTakePicture
。
public void onBtnPickGallery() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), GALLERY_REQUEST_CODE);
}
public void onBtnTakePicture() {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File photo = new File(Environment.getExternalStorageDirectory(), "dir/pic.jpg");
Uri outputFileUri = Uri.fromFile(photo);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE);
}
然后您可以使用onActivityResult()
方法获取结果。