当前位置: 首页 > 知识库问答 >
问题:

如何打开gallery以选择多个图像?

斜宁
2023-03-14

我想打开画廊与多个图像选择功能,我使用以下代码。

        Intent intent = new Intent();
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,"Select Picture"), 1);

它会打开gallery应用程序,但不允许我选择多个图像。

共有3个答案

丌官皓君
2023-03-14

试试这个:

public class MainActivity extends AppCompatActivity implements    View.OnClickListener {

  private static final int SELECT_PICTURE = 100;
  private static final String TAG = "MainActivity";

  CoordinatorLayout coordinatorLayout;
  FloatingActionButton btnSelectImage;
  AppCompatImageView imgView;


  @Override
   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
   setSupportActionBar(toolbar);

   // Find the views...
   coordinatorLayout = (CoordinatorLayout)      findViewById(R.id.coordinatorLayout);
   btnSelectImage = (FloatingActionButton)  findViewById(R.id.btnSelectImage);
   imgView = (AppCompatImageView) findViewById(R.id.imgView);

   btnSelectImage.setOnClickListener(this);

   }

   /* Choose an image from Gallery */
   void openImageChooser() {
   Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"),  SELECT_PICTURE);
  }

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
       if (requestCode == SELECT_PICTURE) {
        // Get the url from data
        Uri selectedImageUri = data.getData();
        if (null != selectedImageUri) {
            // Get the path from the Uri
            String path = getPathFromURI(selectedImageUri);
            Log.i(TAG, "Image Path : " + path);
            // Set the image in ImageView
            imgView.setImageURI(selectedImageUri);
             }
           }
         }
       }


     public String getPathFromURI(Uri contentUri) {
     String res = null;
     String[] proj = {MediaStore.Images.Media.DATA};
     Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
     if (cursor.moveToFirst()) {
       int column_index =   cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
      res = cursor.getString(column_index);
    }
    cursor.close();
    return res;
 }

   @Override
   public void onClick(View v) {
     openImageChooser();
    }
}

在清单文件中添加权限。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
籍利
2023-03-14

单击并按住可选择多个图像。不要只点击图片。你也可以用这个来接收这些图像。

int PICK_IMAGE_MULTIPLE = 1;
String imageEncoded;
List<String> imagesEncodedList;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    try {
        // When an Image is picked
        if (requestCode == 1 && resultCode == RESULT_OK
                && null != data) {
            // Get the Image from data

            String[] filePathColumn = { MediaStore.Images.Media.DATA };
            imagesEncodedList = new ArrayList<String>();
            if(data.getData()!=null){

                Uri mImageUri=data.getData();

                // Get the cursor
                Cursor cursor = getContentResolver().query(mImageUri,
                        filePathColumn, null, null, null);
                // Move to first row
                cursor.moveToFirst();

                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                imageEncoded  = cursor.getString(columnIndex);
                cursor.close();

            }else {
                if (data.getClipData() != null) {
                    ClipData mClipData = data.getClipData();
                    ArrayList<Uri> mArrayUri = new ArrayList<Uri>();
                    for (int i = 0; i < mClipData.getItemCount(); i++) {

                        ClipData.Item item = mClipData.getItemAt(i);
                        Uri uri = item.getUri();
                        mArrayUri.add(uri);
                        // Get the cursor
                        Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null);
                        // Move to first row
                        cursor.moveToFirst();

                        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                        imageEncoded  = cursor.getString(columnIndex);
                        imagesEncodedList.add(imageEncoded);
                        cursor.close();

                    }
                    Log.v("LOG_TAG", "Selected Images" + mArrayUri.size());
                }
            }
        } else {
            Toast.makeText(this, "You haven't picked Image",
                    Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG)
                .show();
    }

    super.onActivityResult(requestCode, resultCode, data);
}
杜哲彦
2023-03-14

从api22到api29,这对我很有效。

Intent intent = new Intent();
                intent.setType("image/*");
                intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
                intent.setAction(Intent.ACTION_GET_CONTENT);
                intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(intent, 105);

然后在活动结果覆盖方法中添加此代码。

if (resultCode == RESULT_OK && requestCode == 105) {
            ClipData clipData = data.getClipData();
            if (clipData != null) {
                for (int i = 0; i < clipData.getItemCount(); i++) {
                    Uri imageUri = clipData.getItemAt(i).getUri();
                    // your code for multiple image selection
                }
            } else {
              Uri uri = data.getData();
                // your codefor single image selection
            }

注意:在你得到图库屏幕后,再按住图像一点。然后在右上角单击“打开”。它将允许你选择多个图像。

 类似资料:
  • 问题内容: 如何选择多个文件? 问题答案: 新答案: 在HTML5中,您可以添加属性以选择多个文件。 旧答案: 每个只能选择1个文件。如果要发送多个文件,则必须使用多个输入标签或使用Flash或Silverlight。

  • 当我打开新项目的vscode时,它显示了我以前工作的多个选项卡,我该如何解决这个问题?

  • 我在drawable文件夹(example.jpg,sue.png)中有2个图像。 我想打开drawable文件夹作为一个库来选择一个新的图像,然后新的图像将替换原始图像(在本例中,原始图像是example.jpg) 但是当我打开图库选择新图像时,却没有图像可供选择。 我应该如何解决这个问题? 下面是我的代码: ProfileActivity: XML:

  • 问题内容: 有没有比以下更有效的方法: 问题答案: 在查询中使用PARTITION(partitionN)语法应该非常少见。 通常,您只想为分区键指定值,并允许Oracle执行分区消除。例如,如果您的表每天根据TRANSACTION_DATE进行分区 将从今天的分区,昨天的分区和前一天的分区中选择所有数据。

  • 问题内容: 在hibernate状态下,我可以执行以下操作 现在,如果我想获取int和String怎么办? 现在列表的结构是什么? 问题答案: 这可以。您唯一需要了解的是它将返回如下列表:

  • 问题内容: 如何选择多个文件? 问题答案: 在HTML5中,您可以添加multiple属性以选择多个文件。 旧答案: 每个只能选择1个文件。如果要发送多个文件,则必须使用多个输入标签或使用Flash或Silverlight。