0

我正在我的应用程序中启动一个凸轮意图,并希望将图片存储在我的应用程序文件夹中的图像文件夹中。为了实现这一点,我开始像这样的凸轮意图

public void startCamAction(View view) {

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, this.getApplicationContext().getDir("images", MODE_PRIVATE));
    startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), TAKE_PICTURE);
}

在下一个活动中,我想对这张图片做点什么,但我猜它不起作用,因为我的应用程序无权访问这个文件夹。图片存放的文件夹是

content:://media/external/images/media/20

这不是所需的路径,我必须如何配置它才能将图片存储在我的应用程序文件夹中?

谢谢

4

3 回答 3

1

实际上content:://media/external/images/media/20是一个Uri 不是真正的文件路径..

所以如果你想从这个 Uri 获得真正的路径,那么你必须做类似的事情,

Uri uri = content:://media/external/images/media/20
String imageFile = getRealPathFromURI(uri);

方法getRealPathFromURI()

private String getRealPathFromURI(Uri contentURI) {
    Cursor cursor = getContentResolver()
               .query(contentURI, null, null, null, null); 
    cursor.moveToFirst(); 
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    return cursor.getString(idx); 
}

更新:

同样从您的代码行,

intent.putExtra(MediaStore.EXTRA_OUTPUT, this.getApplicationContext().getDir("images", MODE_PRIVATE));

您捕获的图像存储在应用程序的内部存储中。因此,您可以在任何活动的应用程序中访问此目录。

要从此目录中检索文件,您可以使用简单的文件操作。

像,

File directory = this.getApplicationContext().getDir("images", MODE_PRIVATE);
于 2012-12-05T09:56:15.183 回答
0

采用

Context.getExternalCacheDir()
Context.getExternalFilesDir(String type)

您将获得应用程序可以访问的 SD 卡上的目录。它看起来像

/sdcard/Android/your.app.package.name/

并且不要忘记将其添加到您的清单中:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
于 2012-12-05T09:51:38.687 回答
0

我怀疑相机可以保存到应用程序的目录中。主要是因为权利问题。

最好的是将其存储到外部存储(正如您所做的,从 URI 判断content://media/external/images/media/20:)

您始终可以使用此 URI 复制文件并将其保存在您的应用程序数据目录中,然后将其从外部目录中删除。

其他解决方案是指定一个自己的 ContentProvider。在此 ContentProvider 中,您可以保存文件。 http://dharmendra4android.blogspot.be/2012/04/save-captured-image-to-applications.html

于 2012-12-05T09:55:19.543 回答