我正在我的应用程序中启动一个凸轮意图,并希望图片将存储在我的app文件夹中的app文件夹中。为了达到这个目的,我正在开始像这样的凸轮意图
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
这不是理想的路径,我如何配置它以便将图片存储在我的app文件夹中?
由于
答案 0 :(得分: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);
答案 1 :(得分:0)
使用
Context.getExternalCacheDir()
Context.getExternalFilesDir(String type)
您将获得SD卡上您的应用有权访问的目录。它看起来像
/sdcard/Android/your.app.package.name/
不要忘记将此添加到您的清单中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
答案 2 :(得分:0)
我怀疑相机可以保存到应用程序的目录中。主要是因为权利问题。
最好是将它存储到外部商店(就像你所做的那样,从URI来判断:content://media/external/images/media/20
)
您始终可以使用此URI复制文件并将其保存在应用程序数据目录中,然后将其从外部目录中删除。
其他解决方案是指定自己的ContentProvider。在此ContentProvider中,您可以保存文件。 http://dharmendra4android.blogspot.be/2012/04/save-captured-image-to-applications.html