我想添加到 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);
}
一旦你得到了真正的路径,你就可以按照 lanks 的建议将它移动到任何你想要的地方。