xamarin 相册浏览功能
//浏览相册
private void Btn_Browse_Click(object sender, EventArgs e)
{
Intent _intentCut = new Intent(Intent.ActionPick, null);
_intentCut.SetType("image/*");// 设置文件类型
CameraHelper._file = finalFile;//照片的保存路径即相册
_intentCut.PutExtra(MediaStore.ExtraOutput, Android.Net.Uri.FromFile(CameraHelper._file));
StartActivityForResult(_intentCut, requestCode_browse); //2代表看相册
}
if (requestCode == requestCode_shot)//拍照看照片请求
{
if (Android.OS.Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat)
{
int height = Resources.DisplayMetrics.HeightPixels;
int width = iv.Height;
//获取拍照的位图
CameraHelper.bitmap = CameraHelper._file.Path.LoadAndResizeBitmap(width, height);
if (CameraHelper.bitmap != null)
{
//将图片绑定到控件上
iv.SetImageBitmap(CameraHelper.bitmap);
//清空bitmap 否则会出现oom问题
CameraHelper.bitmap = null;
}
// Dispose of the Java side bitmap.
GC.Collect();
string fileName = CameraHelper._file.Name.ToString();
Toast.MakeText(this, fileName, ToastLength.Long).Show();
}
```c#
var url = Android.Net.Uri.Parse("file://" + GetPath(BaseContext, data.Data));
//data.SetData(url);
//将本地相册照片显示在控件上
//Toast.MakeText(this, "报错位置", ToastLength.Long).Show();
//iv_备注信息图片显示控件.SetImageURI(null);
//方法一测试虚拟机可以 真机子错误 **求个解析真实路径方法,华为安卓手机路径**
//iv_备注信息图片显示控件.SetImageURI(Android.Net.Uri.FromFile(new Java.IO.File(GetPath(BaseContext, data.Data))));
//方法二测试虚拟机可以 真机子错误 **求个解析真实路径方法,华为安卓手机路径**
//Bitmap bmp = (Bitmap)data.GetParcelableExtra("data");
//方法三测试虚拟机可以 真机子错误 **求个解析真实路径方法,华为安卓手机路径**
//Bitmap bmp = BitmapFactory.DecodeFile(url.Path);
//iv_备注信息图片显示控件.SetImageBitmap(bmp);
//方法四测试虚拟机可以 真机子错误 **求个解析真实路径方法,华为安卓手机路径**
iv_备注信息图片显示控件.SetImageURI(url);
//测试四虚拟机子可以 真机子失败 **求个解析真实路径方法,华为安卓手机路径**
//ContentResolver cr = this.ContentResolver;
//System.IO.Stream inputis = cr.OpenInputStream(url);
////picUrl = new URL(getIntent().getExtras().getString("map_url"));
//Bitmap pngBM = BitmapFactory.DecodeStream(inputis);
//iv_备注信息图片显示控件.SetImageBitmap(pngBM);
//方法五测试失败
//ContentResolver cr = this.ContentResolver;
//System.IO.Stream inputis = cr.OpenInputStream(url);
//System.Drawing.Image imgs = System.Drawing.Bitmap.FromStream(inputis);
//byte[] by = ImageToBytes(imgs);
//Android.Graphics.Bitmap bitmap =BitmapFactory.DecodeByteArray(by, 0, by.Length);
手机上为什么失败了 虚拟机又可以
觉得应该路径问题
#region 高于 v4.4 版本 解析真实路径
public static String GetPath(Context context, Android.Net.Uri uri)
{
bool isKitKat = Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat;
// DocumentProvider
if (isKitKat && DocumentsContract.IsDocumentUri(context, uri))
{
// ExternalStorageProvider
if (isExternalStorageDocument(uri))
{
String docId = DocumentsContract.GetDocumentId(uri);
String[] split = docId.Split(':');
String type = split[0];
if ("primary".Equals(type.ToLower()))
{
return Android.OS.Environment.ExternalStorageDirectory + "/" + split[1];
}
// TODO handle non-primary volumes
}
// DownloadsProvider
else if (isDownloadsDocument(uri))
{
String id = DocumentsContract.GetDocumentId(uri);
Android.Net.Uri contentUri = ContentUris.WithAppendedId(
Android.Net.Uri.Parse("content://downloads/public_downloads"), long.Parse(id));
return getDataColumn(context, contentUri, null, null);
}
// MediaProvider
else if (isMediaDocument(uri))
{
String docId = DocumentsContract.GetDocumentId(uri);
String[] split = docId.Split(':');
String type = split[0];
Android.Net.Uri contentUri = null;
if ("image".Equals(type))
{
contentUri = MediaStore.Images.Media.ExternalContentUri;
}
else if ("video".Equals(type))
{
contentUri = MediaStore.Video.Media.ExternalContentUri;
}
else if ("audio".Equals(type))
{
contentUri = MediaStore.Audio.Media.ExternalContentUri;
}
String selection = "_id=?";
String[] selectionArgs = new String[] {
split[1]
};
return getDataColumn(context, contentUri, selection, selectionArgs);
}
}
// MediaStore (and general)
else if ("content".Equals(uri.Scheme.ToLower()))
{
// Return the remote address
if (isGooglePhotosUri(uri))
return uri.LastPathSegment;
return getDataColumn(context, uri, null, null);
}
// File
else if ("file".Equals(uri.Scheme.ToLower()))
{
return uri.Path;
}
return null;
}
**求个解析真实路径方法,华为安卓手机路径**
原文链接:https://blog.csdn.net/u014194297/article/details/100376297
真机子运行报错如何解决