Я бы хотел добавить решение Лэнкса.
Допустим, вы используете следующий код, чтобы сделать снимок
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);
}
Как только у вас будет реальный путь, вы можете переместить его туда, куда вам нужно, как подсказывают лэнки.