繁体   English   中英

如何获取从图库中选择的图像的目录和文件名

[英]How to get Directory and file name of an image selected from gallery

我需要使用这个功能

java.io.File.File(文件目录,字符串名称)

公共文件(文件目录,字符串名称)

API级别1中已添加使用指定的目录和名称构造一个新文件。 参数dir存储文件的目录。 命名文件的名称。 如果name为null,则抛出NullPointerException。

现在我们可以看到它需要文件dir和名称作为参数。 现在,我按意图从图库中选择一个图像。 如何获取所选文件的目录和名称。

这是代码段:

public File String_to_File(String img_url) {

        try {
            File rootSdDirectory = Environment.getExternalStorageDirectory();

---------------------------------------------------------------------------------------
            **casted_image = new File(rootSdDirectory, "attachment.jpg");**
---------------------------------------------------------------------------------------

            if (casted_image.exists()) {
                casted_image.delete();
            }
            casted_image.createNewFile();

            FileOutputStream fos = new FileOutputStream(casted_image);

            URL url = new URL(img_url);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setDoOutput(true);
            connection.connect();
            InputStream in = connection.getInputStream();

            byte [ ] buffer = new byte [1024];
            int size = 0;
            while ((size = in.read(buffer)) > 0) {
                fos.write(buffer, 0, size);
            }
            fos.close();
            return casted_image;

        } catch (Exception e) {

            System.out.print(e);
            // e.printStackTrace();

        }
        return casted_image;
    }

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

         if (requestCode == RESULT_LOAD_IMAGE && 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);
             cursor.close();

             iv.setImageURI(selectedImage);

             // String picturePath contains the path of selected Image
         }
    }

如何在行之间将适当的参数传递给函数?

我正在引用共享文本图像在Twitter的Android示例 一切都很好,除了我想使用自己选择的图像而不是他的URL图像。 请帮忙。

你可以这样

File selectedFile = Environment.getExternalStorageDirectory();
File parentDir = selectedFile.getParentFile();

casted_image = new File(parentDir, "attachment.jpg");

或者如果您想传递所选文件的名称而不是特定文件名。 使用以下行。

casted_image = new File(parentDir, selectedFile.getName());

您还可以通过使用selectedFile.isFile();来检查所选文件是目录文件还是普通文件selectedFile.isFile(); selectedFile.isDirectory();

通过Intent.putExtra()方法在意图上设置EXTRA_ALLOW_MULTIPLE选项:

intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

您上面的代码应如下所示:

Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE );
//intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

注意:EXTRA_ALLOW_MULTIPLE选项仅在Android API 18及更高版本中可用。

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

    if (requestCode == RESULT_LOAD_IMAGE  && 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);
    casted_image = new File(picturePath);
    cursor.close();
    // String picturePath contains the path of selected Image
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM