我想得到我从图库中选择的图像路径
Android.Net.Uri
到
path
,这里有一个解决方案:
private string GetPathToImage(Android.Net.Uri uri)
{
string doc_id = "";
using (var c1 = ContentResolver.Query(uri, null, null, null, null))
{
c1.MoveToFirst();
string document_id = c1.GetString(0);
doc_id = document_id.Substring(document_id.LastIndexOf(":") + 1);
}
string path = null;
// The projection contains the columns we want to return in our query.
string selection = Android.Provider.MediaStore.Images.Media.InterfaceConsts.Id + " =? ";
using (var cursor = ContentResolver.Query(Android.Provider.MediaStore.Images.Media.ExternalContentUri, null, selection, new string[] { doc_id }, null))
{
if (cursor == null) return path;
var columnIndex = cursor.GetColumnIndexOrThrow(Android.Provider.MediaStore.Images.Media.InterfaceConsts.Data);
cursor.MoveToFirst();
path = cursor.GetString(columnIndex);
}
return path;
}
ChoosePhoto();
...
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == 0)
{
var uri = data.Data;
var path = GetPathToImage(uri);
System.Diagnostics.Debug.WriteLine("Image path == " + path );
//My result is this ==> [0:] Image path == /storage/emulated/0/DCIM/Camera/IMG_20170813_223324.jpg
}
}
最重要的
,当您使用此方法时,可能会遇到以下问题:
Java语言Lang.SecurityException:权限拒绝:读取com。安卓供应商。媒体MediaProvider uricontent://media/external/images/media从pid=21975,uid=10417需要android。准许READ\u EXTERNAL\u STORAGE,或grantUriPermission()
Requesting Permissions at Run Time
,用户在应用程序运行时授予应用程序权限,而不是在安装应用程序时。你应该检查一下
android.permission.READ_EXTERNAL_STORAGE
权限,如果没有,则需要请求权限。