Я думаю, что это происходит только после того, как вы сделали снимок, потому что filePath = data.Data;
возвращает null
, если вы выберете изображение из фотографий, оно вернет uri
.
, чтобы вы могли попробуйте использовать другие методы, вы можете передать byte[]
данные растрового изображения после того, как вы сделаете снимок:
public override void OnActivityResult(int requestCode, int resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == c_TAKE_IMAGE_REQUSET &&
resultCode == (int)Result.Ok &&
data != null)
{
try
{
mBitMap = (Bitmap)data.Extras.Get("data");
imgView.SetImageBitmap(mBitMap);
using (var stream = new MemoryStream())
{
mBitMap.Compress(Bitmap.CompressFormat.Jpeg, 100, stream);
bitmapData = stream.ToArray();
}
}
catch (System.IO.IOException ex)
{
System.Console.WriteLine(ex);
}
}
}
, тогда вы можете передать bitmapData
:
Intent intent = new Intent(Activity, typeof(UploadActivity));
intent.PutExtra("img", bitmapData);
StartActivity(intent);
показать его в новом действии:
byte[] bitmapbyte = Intent.GetByteArrayExtra("img");
Bitmap bitmap = BitmapFactory.DecodeByteArray(bitmapbyte, 0, bitmapbyte.Length);
m_imageView.SetImageBitmap(bitmap);
Обновление :
Если вы хотите использовать путь к файлу, вы можете сделать так:
private Java.IO.File outputImage;
private Android.Net.Uri photoUri; // the camera takes a photo and returns the image path
//Create a file object to store the image after the photo is taken, which is also the photo path after the photo is taken successfully
Java.IO.File outputImage = new Java.IO.File(xxx,xxx);
//determine the current Android version
if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
{
photoUri = FileProvider.GetUriForFile(this, "xxxxx", outputImage);
}
else
{
photoUri = Android.Net.Uri.FromFile(outputImage);
}
Intent intent = new Intent(MediaStore.ActionImageCapture);
intent.PutExtra(MediaStore.ExtraOutput, photoUri);
StartActivityForResult(intent, TAKE_IMAGE_REQUSET);
тогда вы можете использовать photoUri
.
И на некоторых устройствах вы можете использовать метод ниже, чтобы сохранить изображение и получить путь.
filePath = Android.Net.Uri.Parse(MediaStore.Images.Media.InsertImage(Activity.ContentResolver, mBitMap, null, null));
Примечание :
FileProvider используется в Android 7.0 и выше.