无法使用getFilesDir()将照片保存到外部存储

时间:2015-02-19 20:44:29

标签: android photos

我正在尝试将照片保存到外部存储空间并将其显示在ImageView中,但我不希望其他应用可以访问此照片。当我想创建该文件时,我尝试用方法File创建一个新的getFilesDir()作为目录参数,但如果我问我是否可以写入它(保存图像),它会返回我不能(详见代码)。

请注意,该应用具有android.permission.WRITE_EXTERNAL_STORAGE权限。

public void takePhoto(View v) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File file = new File(getFilesDir(), "my_image.jpg");

    // Check if I can write in this path (I always get that I can't)
    if (file.canWrite()) {
        Toast.makeText(this, "I can write!", Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(this, "I CAN'T WRITE!", Toast.LENGTH_LONG).show();
    }

    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));

    startActivityForResult(intent, IMAGE_REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == IMAGE_REQUEST_CODE) {

        File file = new File(getFilesDir(), "my_image.jpg");

        Bitmap bitmap = decodeSampledBitmapFromFile(file.getAbsolutePath(), 1000, 700);

        imageView.setImageBitmap(bitmap);
    }
}

但是,如果我使用Environment.getExternalStorageDirectory()方法,我可以保存照片。

我想我可能会误解File如何运作,但我不知道究竟是什么。我没有FC,图像只是没有在ImageView中显示。

1 个答案:

答案 0 :(得分:0)

如果您保存到外部存储空间,每个人都会看到图像:

这是External Storage

然后,当您收到onActivityResult上的回调时,您将收到图像中的URI

   Uri mUriFile = data.getData() 

然后,根据操作系统版本,您可以获取文件路径

这是一个很好的帖子来获取它Android Gallery on KitKat returns different Uri for Intent.ACTION_GET_CONTENT