安卓如何在内部存储中保存图片 URI

4
假设我创建了一个意图来从图库或其他目录中选择图片,我应该从onActivityResult()方法中得到一个URI。 是否可以将此URI精确复制到本地文件(内部存储)中?
    onActivityResult(){

     //get image uri
      Uri uri=data.getData();

      //create a file 

      File image_file=new File(path);


      //now how to save uri to image_File???


    }

使用ContentResolver#openInputStream(Uri)获取一个InputStream,并使用Context#openFileOutput()获取一个指向内部存储文件的FileOutputStream - Mike M.
@MikeM. 你能展示一个例子吗? - Hasan Bou Taam
找到了吗?很好。实际上,我会将其标记为重复,因为这里已经有很多类似答案的问题了。不过还是谢谢你提供帮助,我很感激。很高兴你解决了问题。祝一切顺利! - Mike M.
@MikeM. 刚刚有一个问题,如果将图像复制到另一个文件中,它是否仍然具有所有细节,例如(exif)? - Hasan Bou Taam
1
@MikeM。感谢您的所有帮助和时间。 - Hasan Bou Taam
显示剩余6条评论
1个回答

2
使用此代码将内容写入文件中。 忽略以下代码
File path = context.getFilesDir();
File file = new File(path, "myfile.txt");
FileOutputStream stream = new FileOutputStream(file);

Uri uri = ....
String uriStr = uri.toString();
try {
  stream.write(uriStr.getBytes());
} finally {
  stream.close();
}

参考链接

新增内容:

Uri获取Bitmap

   public  Bitmap getContactBitmapFromURI(Context context, Uri uri) {
    try {

        InputStream input = context.getContentResolver().openInputStream(uri);
        if (input == null) {
            return null;
        }
        return BitmapFactory.decodeStream(input);
    }
    catch (FileNotFoundException e)
    {

    }
    return null;

}

Bitmap 保存到文件

    public  File saveBitmapIntoSDCardImage(Context context, Bitmap finalBitmap) {

    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(Util.getTempFileReceivedPath(conetext));
    myDir.mkdirs();

    String fname = "file_name" + ".jpg";
    File file = new File (myDir, fname);

    try {
        FileOutputStream out = new FileOutputStream(file);
        finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
        out.close();

    } catch (Exception e) {
        e.printStackTrace();
    }

    return file;
}

是的,这就是为什么我在评论中再次提问的原因,但@siv.data回答说只保存URI。 - Abu Yousuf
我认为他们使用URI来表示实际的文件。 - Mike M.
@MikeM. 因为从URI获取路径有点困难,所以我想将URI复制到另一个文件(自定义文件)中以获取对它的引用。 - Hasan Bou Taam
@MikeM。我想我在链接中看错了答案,你能否请参考一下你指出的答案? - Hasan Bou Taam
2
@svi.data 在该示例中,您将使用openFileOutput()代替new FileOutputStream(...)。然后,文件将位于data/data/your.package.name/下。 - Mike M.
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接