如何拍摄照片并将其保存到特定文件夹。我知道它保存到sdcard / DCIM / etc
但我不希望它存在,我希望它存储在/ sdcard / Camera中的文件夹中
我使用以下内容制作了目录:
String destPath = Android.OS.Environment.ExternalStorageDirectory + "/Camera";
然后我启动相机意图并尝试将保存文件指向我制作的路径。
Intent launchCamera = new Intent(Android.Provider.MediaStore.ActionImageCapture);
launchCamera.PutExtra(MediaStore.ExtraOutput, destPath);
这不起作用。图像仍然保存到/ sdcard / dcim / etc
想法?
答案 0 :(得分:2)
从我使用Monodroid开发应用程序时所收集到的内容是,相机非常大,并且在大多数情况下都不能满足您的需求。这包括指定要保存图像捕获的目标。 据我所知,这些问题并非特定于Monodroid,而是发生在java android sdk上。
您可能希望查看此问题的方法是在不指定目标的情况下捕获图像,然后在OnActivityResult方法中检索保存到库中的最新图像。获得最新图像后,您可以将其移至首选目的地。
以下是OnActivityResult中的一些示例代码。
检索捕获图像的文件名
Android.Net.Uri targetUri = data.Data;
String origin = "";
String [] proj = { MediaStore.MediaColumns.Data.ToString (), BaseColumns.Id };
var qry = ManagedQuery (MediaStore.Images.Media.ExternalContentUri, proj, null, null, "date_added DESC");
qry.MoveToFirst ();
origin = qry.GetString (qry.GetColumnIndexOrThrow (MediaStore.MediaColumns.Data.ToString ()));
将图像移动到所需目的地
System.IO.File.Move (origin, "yourdestinationfilenamehere");
答案 1 :(得分:1)
我想添加到lanks的解决方案。
假设您使用以下代码拍摄照片
var uri = ContentResolver.Insert(MediaStore.Images.Media.ExternalContentUri,
new ContentValues());
var intent = new Intent(MediaStore.ActionImageCapture);
intent.PutExtra(MediaStore.ExtraOutput, uri);
StartActivityForResult(intent, ACTIVITY_RESULT_PICTURE_TAKEN);
pictureUri = uri;
ACTIVITY_RESULT_PICTURE_TAKEN只是一个简单的值,您可以在中使用 OnActivityResult检查哪些活动已完成。
你的OnActivityResult看起来像这样:
protected override void OnActivityResult(int requestCode,
Result resultCode, Intent data)
{
if (resultCode == Result.Ok && requestCode == ACTIVITY_RESULT_PICTURE_TAKEN)
{
string picturePath = GetRealPathFromURI(pictureUri);
//Do something with the file
}
}
你之前得到的Uri是特定于android的东西,需要翻译。
看起来像“// content:// media / external / media / 11917”,它不是 有效路径。
这正是GetRealPathFromURI函数的作用:
public string GetRealPathFromURI(Android.Net.Uri contentUri)
{
var mediaStoreImagesMediaData = "_data";
string[] projection = { mediaStoreImagesMediaData };
Android.Database.ICursor cursor = this.ManagedQuery(contentUri, projection,
null, null, null);
int columnIndex = cursor.GetColumnIndexOrThrow(mediaStoreImagesMediaData);
cursor.MoveToFirst();
return cursor.GetString(columnIndex);
}
一旦你获得了真正的路径,就可以将它移动到你想要的地方。