如何接收和保存从另一个应用程序共享的图像

How to receive and save image shared from another application

if(intent.getType().startsWith("image/")){
    Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
    imageView.setImageUri(imageUri);
}

需要将此图像保存在我的应用程序数据目录中。在内容解析器 returns 上查询仅指向已保存在设备中的图像文件的路径。喜欢,

private String getPathFromURI(Uri contentURI) {
        String result = null;
        Cursor cursor = null;
        try {
            cursor = getContentResolver().query(contentURI, null, null, null, null);
            cursor.moveToFirst();
            int idx = cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA);
            result = cursor.getString(idx);
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
        return result;
    }

但这并不总是有效,因为其中一些图像文件位于应用程序的私有目录中。 如何获得对此类文件的读取权限,以便我的应用程序可以 written/saved 共享文件的副本? 有什么问题吗,我应该采取其他方式吗?请帮忙,谢谢。

Queering on content resolver returns path to only those image files which are already saved in the device

远比这更糟糕。这仅适用于 MediaStore 中的 Uri,而且仅在某些情况下有效。

What to do to get read access to such files, so that i can write copies of them for my application?

第 1 步:使用 getContentResolver().openInputStream()Uri

表示的内容上获得 InputStream

第 2 步:为您想要的副本创建 FileOutputStream

步骤 #3:使用标准 Java 文件 I/O

将字节从 InputStream 复制到 FileOutputStream

IOW,这与使用 HttpURLConnection 从 URL 下载文件没有太大区别。