【问题标题】:Take multiple images form camera and get all the images in onActivityresult in android从相机拍摄多张图像并在android的onActivityresult中获取所有图像
【发布时间】:2015-08-27 09:14:05
【问题描述】:

在我的应用程序中,我需要捕获多个图像形式的相机。

使用下面的代码我可以捕获多个图像,但是如何在回调方法中获取所有图像路径

Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE);
            startActivity(intent);

这可以完成吗?请给我建议。

【问题讨论】:

标签: android android-camera android-camera-intent


【解决方案1】:

是的,如果我正确理解了这个问题,请尝试以下步骤来解决您的问题

创建名称为 Image 的模型: 创建成员以保存图像信息,如 uri、名称等。

public class Image implements Parcelable {

public Uri uri;
public int orientation;

public Image(Uri mUri, int mOrientation) {
    uri = mUri;
    orientation = mOrientation;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeParcelable(this.uri, 0);
    dest.writeInt(this.orientation);
}}

创建数组列表将数据保存到数组列表中

使用相机 takePicture 方法 mCamera.takePicture(null, null, mPicture); 并使用以下方法保存图像:

public void saveImage(Bitmap bitmap, String fileName) {
    String path = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), bitmap, fileName, null);
    Uri contentUri = Uri.parse(path);
    final Image image = getImageFromContentUri(contentUri);

    getActivity().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, contentUri));

    getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {
            ((TheImagePickerActivity) getActivity()).addImage(image);
        }
    });
}

 @Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    ArrayList<Image> list = new ArrayList<>(arraySelectedImages);
    outState.putParcelableArrayList("", list);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    populateUi(savedInstanceState);
}

private void populateUi(Bundle savedInstanceState) {
    ArrayList<Image> arrayImages = savedInstanceState.getParcelableArrayList("");

    if (arrayImages != null) {
        for (Image image : arrayImages) {
            addImage(image);
        }
    }
}

public boolean addImage(Image image) {

    if (arraySelectedImages == null) {
        arraySelectedImages = new HashSet<>();
    }


        if (arraySelectedImages.add(image)) {
            // Do Something
            return true;

    }

    return false;
}

【讨论】:

    猜你喜欢
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多