【问题标题】:Length of image picked from gallery via intent通过意图从图库中选择的图像长度
【发布时间】:2013-11-06 16:39:02
【问题描述】:

我有问题。我想制作文件上传器应用程序。我正在使用 Intent.ACTION_GET_CONTENT 从我的设备中选择任何文件。我像这样在 onActivityResult 中接收文件:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case REQUEST_CHOOSER:
            if (resultCode == RESULT_OK) {
                final Uri uri = data.getData();
                File file = FileUtils.getFile(uri);
                String fileName = file.getName();
                String filePath = file.getPath();
                int fileSize = Integer.parseInt(String.valueOf(file.length()/1024));

                tvName.setText(fileName);
                tvPath.setText(filePath);
                tvSize.setText(String.valueOf(fileSize) + "kB");
            }
    }
}

我想显示有关所选文件的用户信息。一般来说一切都很好,但是当我从图库中选择图片时:

  1. 文件名没有显示格式 - 它是一个数字(可能引用内存中的文件)。当我通过已安装的文件探索选择图像时,我会得到类似 imagename.png 等的东西,但从画廊中选择的就像“195493”
  2. 从图库中选取的数据创建的 File.length 为 0。

在通过意图从图库中选择图像后,有什么方法可以访问真实的图像名称和大小?

【问题讨论】:

    标签: android file android-intent gallery


    【解决方案1】:

    只需从意图中输入 URI 并获取任何文件的大小

    uri = data.getData();
            Cursor returnCursor = getContentResolver().query(uri, null, null, null, null);
            int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
            int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);
            returnCursor.moveToFirst();
            Log.e("TAG", "Name:" + returnCursor.getString(nameIndex));
            Log.e("TAG","Size: "+Long.toString(returnCursor.getLong(sizeIndex)));
    

    我想这会对你有所帮助。

    【讨论】:

      【解决方案2】:

      从图库中挑选图像时,您不会得到对实际文件的引用,而是对数据库中的一行的引用。您必须使用 this answer 中的光标检索实际文件路径。

      【讨论】:

      • 是的,我刚刚完成了它并且它有效,无论如何感谢您提供正确提示的回复
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      相关资源
      最近更新 更多