Android 4.4以下 选择图片是可以获取到图片路径的.高于Android 4.4获取图片路径只是获取到一个图片编号. 所以需要针对Android版本进行路径解析:

  1. #region 高于 v4.4 版本 解析真实路径
  2. public static String GetPath(Context context,Android.Net.Uri uri)
  3. {
  4.  
  5. bool isKitKat = Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat;
  6.  
  7. // DocumentProvider
  8. if (isKitKat && DocumentsContract.IsDocumentUri(context, uri))
  9. {
  10. // ExternalStorageProvider
  11. if (isExternalStorageDocument(uri))
  12. {
  13. String docId = DocumentsContract.GetDocumentId(uri);
  14. String[] split = docId.Split(':');
  15. String type = split[];
  16.  
  17. if ("primary".Equals(type.ToLower()))
  18. {
  19. return Android.OS.Environment.ExternalStorageDirectory + "/" + split[];
  20. }
  21.  
  22. // TODO handle non-primary volumes
  23. }
  24. // DownloadsProvider
  25. else if (isDownloadsDocument(uri))
  26. {
  27.  
  28. String id = DocumentsContract.GetDocumentId(uri);
  29. Android.Net.Uri contentUri = ContentUris.WithAppendedId(
  30. Android.Net.Uri.Parse("content://downloads/public_downloads"),long.Parse(id));
  31.  
  32. return getDataColumn(context, contentUri, null, null);
  33. }
  34. // MediaProvider
  35. else if (isMediaDocument(uri))
  36. {
  37. String docId = DocumentsContract.GetDocumentId(uri);
  38. String[] split = docId.Split(':');
  39. String type = split[];
  40.  
  41. Android.Net.Uri contentUri = null;
  42. if ("image".Equals(type))
  43. {
  44. contentUri = MediaStore.Images.Media.ExternalContentUri;
  45. }
  46. else if ("video".Equals(type))
  47. {
  48. contentUri = MediaStore.Video.Media.ExternalContentUri;
  49. }
  50. else if ("audio".Equals(type))
  51. {
  52. contentUri = MediaStore.Audio.Media.ExternalContentUri;
  53. }
  54.  
  55. String selection = "_id=?";
  56. String[] selectionArgs = new String[] {
  57. split[]
  58. };
  59.  
  60. return getDataColumn(context, contentUri, selection, selectionArgs);
  61. }
  62. }
  63. // MediaStore (and general)
  64. else if ("content".Equals(uri.Scheme.ToLower()))
  65. {
  66.  
  67. // Return the remote address
  68. if (isGooglePhotosUri(uri))
  69. return uri.LastPathSegment;
  70.  
  71. return getDataColumn(context, uri, null, null);
  72. }
  73. // File
  74. else if ("file".Equals(uri.Scheme.ToLower()))
  75. {
  76. return uri.Path;
  77. }
  78.  
  79. return null;
  80. }
  81.  
  82. /**
  83. * Get the value of the data column for this Uri. This is useful for
  84. * MediaStore Uris, and other file-based ContentProviders.
  85. *
  86. * @param context The context.
  87. * @param uri The Uri to query.
  88. * @param selection (Optional) Filter used in the query.
  89. * @param selectionArgs (Optional) Selection arguments used in the query.
  90. * @return The value of the _data column, which is typically a file path.
  91. */
  92. public static String getDataColumn(Context context,Android.Net.Uri uri, String selection,
  93. String[] selectionArgs)
  94. {
  95.  
  96. ICursor cursor = null;
  97. String column = "_data";
  98. String[] projection = {
  99. column
  100. };
  101.  
  102. try
  103. {
  104. cursor = context.ContentResolver.Query(uri, projection, selection, selectionArgs,
  105. null);
  106. if (cursor != null && cursor.MoveToFirst())
  107. {
  108. int index = cursor.GetColumnIndexOrThrow(column);
  109. return cursor.GetString(index);
  110. }
  111. }
  112. finally
  113. {
  114. if (cursor != null)
  115. cursor.Close();
  116. }
  117. return null;
  118. }
  119.  
  120. /**
  121. * @param uri The Uri to check.
  122. * @return Whether the Uri authority is ExternalStorageProvider.
  123. */
  124. public static bool isExternalStorageDocument(Android.Net.Uri uri)
  125. {
  126. return "com.android.externalstorage.documents".Equals(uri.Authority);
  127. }
  128.  
  129. /**
  130. * @param uri The Uri to check.
  131. * @return Whether the Uri authority is DownloadsProvider.
  132. */
  133. public static bool isDownloadsDocument(Android.Net.Uri uri)
  134. {
  135. return "com.android.providers.downloads.documents".Equals(uri.Authority);
  136. }
  137.  
  138. /**
  139. * @param uri The Uri to check.
  140. * @return Whether the Uri authority is MediaProvider.
  141. */
  142. public static bool isMediaDocument(Android.Net.Uri uri)
  143. {
  144. return "com.android.providers.media.documents".Equals(uri.Authority);
  145. }
  146.  
  147. /**
  148. * @param uri The Uri to check.
  149. * @return Whether the Uri authority is Google Photos.
  150. */
  151. public static bool isGooglePhotosUri(Android.Net.Uri uri)
  152. {
  153. return "com.google.android.apps.photos.content".Equals(uri.Authority);
  154. }
  155.  
  156. #endregion

xamarin.android之 Android 4.4+ 获取图片真实路径的更多相关文章

  1. Android从相册中获取图片以及路径

    首先是相册图片的获取: private final String IMAGE_TYPE = "image/*"; private final int IMAGE_CODE = 0; ...

  2. 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换

    转:http://blog.csdn.net/q445697127/article/details/40537945 /** * 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换 ...

  3. js和jquery如何获取图片真实的宽度和高度

    按照插入的图片的尺寸来判断图片是横图还是竖图.然后判断过后给予不同的展示方式,下面为大家介绍下js和jquery如何获取图片真实的宽度和高度   1.什么时候需要获取图片真实的宽度和高度 在做pc网页 ...

  4. js和jquery获取图片真实的宽度和高度

    1.什么时候需要获取图片真实的宽度和高度 在做pc网页的时候,有时候会考虑按照插入的图片的尺寸来判断图片是横图还是竖图.然后判断过后给予不同的展示方式! 另外一种就是在手机页面上,在新闻页插入的图片往 ...

  5. 如何通过js和jquery获取图片真实的宽度和高度

    什么时候需要获取图片真实的宽度和高度 在做pc网页的时候,有时候会考虑按照插入的图片的尺寸来判断图片是横图还是竖图.然后判断过后给予不同的展示方式! 另外一种就是在手机页面上,在新闻页插入的图片往往都 ...

  6. js获取上传图片大小,判断上传图片类型,获取图片真实宽度和高度

    html部分 <div class="form-group col-md-12"> <label class="col-md-2 text-right& ...

  7. struts2获取文件真实路径

      CreateTime--2017年8月25日15:59:33 Author:Marydon struts2获取文件真实路径 需要导入: import java.io.FileNotFoundExc ...

  8. android调用系统相机并获取图片

    如果不是特别的要求,通过拍照的方式取得图片的话,我们一般调用系统的拍照来完成这项工作,而没必要再自己去实现一个拍照功能.调用系统相机很简单,只需要一个intent就可以跳转到相几界面,然后再通过onA ...

  9. Android 拍照或者从相册获取图片的实现

    我们常常会用到上传头像,或者发帖子的时候选择本地图片上传的功能.这个很常见 今天因为app的需求我研究了下.现在分享下. 其实不论是通过拍照还是从相册选取都会用到Intent 这是系统提供给我们用来调 ...

随机推荐

  1. Winform开发框架之附件管理应用

    在很多常规的管理系统里面,都可能有附件管理的需求,在我做的一系列医疗行业的病人信息管理系统里面,都希望能很好的管理病人的相关资料,分门别类的进行存储,需要的时候可以预览查看,那么这个功能我们可以把它独 ...

  2. Asp.net生成静态网页的实现代码

    现在做程序都要将动态的页面转换成静态页面,今天教大家在ASP.NET 中实现静态页面的生成方法. using System;  using System.Data;  using System.Con ...

  3. 【C#进阶系列】10 属性

    属性分为无参属性和有参属性(即索引器). 属性相对于字段的优点不仅仅是为了封装,还可以在读写的时候做一些额外操作,缓存某些值或者推迟创建一些内部对象,也适用于以线程安全的方式访问字段. 话说最基本的属 ...

  4. 【jQuery基础学习】10 简单了解jQuery Mobile及jQuery各个级别版本的变化

    关于 jQuery Mobile jQuery Mobile是为了填补jQuery在移动设备应用上的一个新项目.它应用了HTML5和CSS3. 主要特性 基于jQuery构建. 采用与jQuery一致 ...

  5. YEdit

    YEdit YEdit is a YAML editor for Eclipse. See the wiki for more details Installation Use the Eclipse ...

  6. Spring核心概念之AOP

    一.AOP 的概念 AOP(Aspect Oriented Programming)的缩写,面向切面编程,主要作用就是对代码进行增强处理. 理解面向切面编程的含义:就是在不改变原有程序的基础上为代码增 ...

  7. 用C语言制作爱心

    国庆我们实验室布置了作业,其中一项为,利用流程控制语句打印以下图形 * *** ***** ******* ***** *** * 代码如下 #include <stdio.h> int ...

  8. PHP学习笔记:等比例缩放图片

    直接上代码,imgzip($src,$newwid,$newhei)这个函数带进去的分别是原图片.缩放要求的宽度.缩放的长度.代码都备注了,不懂可以留言哈哈 <?php //压缩图片 缩略图 $ ...

  9. mysql awr v1.0.1发布

    现发布mysql awr v1.0.1 修复问题: 1.galera cluster下flush table/index_statistcs时如果系统中业务ddl频繁可能会导致很多进程处于prepar ...

  10. [WF] Quickstart Sample

    [WF] Quickstart Sample 前言 Workflow Foundation(WF),总是给人一种很有用.可是却不知道怎么用的印象.这主要是因为前置的功课太多.要整合很多底层知识,才能完 ...