2016-08-22 86 views
0

我知道在互联网上有很多例子,但没有一个做我真正想要的。我想选择多个图像的意图,并得到它的“网址”就像这样的代码与一个。 (我知道,这个代码不能超过一个选择,但我用这个作为例子的什么,我试图做)从android图库中选择多个图像并获取它的路径

代码:

public static final int RESULT_LOAD_IMG = 0; 
public void LoadImg() { 
     Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(galleryIntent, RESULT_LOAD_IMG); 
    } 

ArrayList<Part> files = new ArrayList<>(); 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = {MediaStore.Images.Media.DATA}; 

      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      files.add(new FilePart("uploadedfile[" + String.valueOf(files.size()) + "]", new File(picturePath))); 
      cursor.close(); 
     } 
    } 

在互联网上搜索,我发现从Laith这个例子Mihyar在这篇文章中:Select multiple images from android gallery 我想在这里做同样的事情,但文件路径不同,并且我不想为我正在做的事情工作。

代码:

int PICK_IMAGE_MULTIPLE = 1 
String imageEncoded;  
List<String> imagesEncodedList; 
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"), PICK_IMAGE_MULTIPLE); 
@Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     try { 
      // When an Image is picked 
      if (requestCode == PICK_IMAGE_MULTIPLE && 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); 
    } 

感谢

+0

为什么不起作用?你想做什么?相当模糊的一切。当文件路径不同时有什么问题?不清楚。 – greenapps

+0

我需要获取文件的路径,但是当我尝试使用第二个文件时,我得到一个应用程序名称(如com.appname.x)和一个带有id的文件,而不是我想要的路径得到。我试图得到这样的东西:“/content/files/image.png”,我得到“com.company.appname /&file6647”或类似的东西 – PaulD

+1

你需要什么文件的路径?使用uri!你可以用它做任何事情。您想做什么? – greenapps

回答

0

没有 “文件路径”。 ACTION_GET_CONTENT不必返回fileUri,并且大部分时间在较新的设备上它将返回contentUri

使用ContentResolveropenInputStream()获得由Uri标识的内容InputStream。使用DocumentFilefromSingleUri()获取有关由Uri标识的内容的元数据。

我甚至无法加载它在ImageView的

毕加索和其他图像加载库(甚至离子)与contentUri值工作,没有问题。

我试图将这些文件上传与离子lib中,需要一个路径

最好的解决办法是使用一个更好的HTTP客户端库,一个能够提供更大的灵活性。 OkHttp(与Okio)应该能够处理从Uri上传。

或者,使用ContentResolveropenInputStream()获取关于内容的InputStream。使用FileOutputStream在某些本地文件上获取流(例如,在getCacheDir()中)。使用Java I/O将InputStream中的字节复制到FileOutputStream。然后,使用Ion的本地文件。

+0

你可以帮我看一个用Ion Pls加载文件的例子吗?我不是很了解这一点,我真的需要使用Ion。 – PaulD