xamarin.android之 Android 4.4+ 获取图片真实路径
Android 4.4以下 选择图片是可以获取到图片路径的.高于Android 4.4获取图片路径只是获取到一个图片编号. 所以需要针对Android版本进行路径解析:
- #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[];
- if ("primary".Equals(type.ToLower()))
- {
- return Android.OS.Environment.ExternalStorageDirectory + "/" + split[];
- }
- // 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[];
- 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[]
- };
- 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;
- }
- /**
- * Get the value of the data column for this Uri. This is useful for
- * MediaStore Uris, and other file-based ContentProviders.
- *
- * @param context The context.
- * @param uri The Uri to query.
- * @param selection (Optional) Filter used in the query.
- * @param selectionArgs (Optional) Selection arguments used in the query.
- * @return The value of the _data column, which is typically a file path.
- */
- public static String getDataColumn(Context context,Android.Net.Uri uri, String selection,
- String[] selectionArgs)
- {
- ICursor cursor = null;
- String column = "_data";
- String[] projection = {
- column
- };
- try
- {
- cursor = context.ContentResolver.Query(uri, projection, selection, selectionArgs,
- null);
- if (cursor != null && cursor.MoveToFirst())
- {
- int index = cursor.GetColumnIndexOrThrow(column);
- return cursor.GetString(index);
- }
- }
- finally
- {
- if (cursor != null)
- cursor.Close();
- }
- return null;
- }
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is ExternalStorageProvider.
- */
- public static bool isExternalStorageDocument(Android.Net.Uri uri)
- {
- return "com.android.externalstorage.documents".Equals(uri.Authority);
- }
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is DownloadsProvider.
- */
- public static bool isDownloadsDocument(Android.Net.Uri uri)
- {
- return "com.android.providers.downloads.documents".Equals(uri.Authority);
- }
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is MediaProvider.
- */
- public static bool isMediaDocument(Android.Net.Uri uri)
- {
- return "com.android.providers.media.documents".Equals(uri.Authority);
- }
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is Google Photos.
- */
- public static bool isGooglePhotosUri(Android.Net.Uri uri)
- {
- return "com.google.android.apps.photos.content".Equals(uri.Authority);
- }
- #endregion
xamarin.android之 Android 4.4+ 获取图片真实路径的更多相关文章
- Android从相册中获取图片以及路径
首先是相册图片的获取: private final String IMAGE_TYPE = "image/*"; private final int IMAGE_CODE = 0; ...
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
转:http://blog.csdn.net/q445697127/article/details/40537945 /** * 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换 ...
- js和jquery如何获取图片真实的宽度和高度
按照插入的图片的尺寸来判断图片是横图还是竖图.然后判断过后给予不同的展示方式,下面为大家介绍下js和jquery如何获取图片真实的宽度和高度 1.什么时候需要获取图片真实的宽度和高度 在做pc网页 ...
- js和jquery获取图片真实的宽度和高度
1.什么时候需要获取图片真实的宽度和高度 在做pc网页的时候,有时候会考虑按照插入的图片的尺寸来判断图片是横图还是竖图.然后判断过后给予不同的展示方式! 另外一种就是在手机页面上,在新闻页插入的图片往 ...
- 如何通过js和jquery获取图片真实的宽度和高度
什么时候需要获取图片真实的宽度和高度 在做pc网页的时候,有时候会考虑按照插入的图片的尺寸来判断图片是横图还是竖图.然后判断过后给予不同的展示方式! 另外一种就是在手机页面上,在新闻页插入的图片往往都 ...
- js获取上传图片大小,判断上传图片类型,获取图片真实宽度和高度
html部分 <div class="form-group col-md-12"> <label class="col-md-2 text-right& ...
- struts2获取文件真实路径
CreateTime--2017年8月25日15:59:33 Author:Marydon struts2获取文件真实路径 需要导入: import java.io.FileNotFoundExc ...
- android调用系统相机并获取图片
如果不是特别的要求,通过拍照的方式取得图片的话,我们一般调用系统的拍照来完成这项工作,而没必要再自己去实现一个拍照功能.调用系统相机很简单,只需要一个intent就可以跳转到相几界面,然后再通过onA ...
- Android 拍照或者从相册获取图片的实现
我们常常会用到上传头像,或者发帖子的时候选择本地图片上传的功能.这个很常见 今天因为app的需求我研究了下.现在分享下. 其实不论是通过拍照还是从相册选取都会用到Intent 这是系统提供给我们用来调 ...
随机推荐
- Winform开发框架之附件管理应用
在很多常规的管理系统里面,都可能有附件管理的需求,在我做的一系列医疗行业的病人信息管理系统里面,都希望能很好的管理病人的相关资料,分门别类的进行存储,需要的时候可以预览查看,那么这个功能我们可以把它独 ...
- Asp.net生成静态网页的实现代码
现在做程序都要将动态的页面转换成静态页面,今天教大家在ASP.NET 中实现静态页面的生成方法. using System; using System.Data; using System.Con ...
- 【C#进阶系列】10 属性
属性分为无参属性和有参属性(即索引器). 属性相对于字段的优点不仅仅是为了封装,还可以在读写的时候做一些额外操作,缓存某些值或者推迟创建一些内部对象,也适用于以线程安全的方式访问字段. 话说最基本的属 ...
- 【jQuery基础学习】10 简单了解jQuery Mobile及jQuery各个级别版本的变化
关于 jQuery Mobile jQuery Mobile是为了填补jQuery在移动设备应用上的一个新项目.它应用了HTML5和CSS3. 主要特性 基于jQuery构建. 采用与jQuery一致 ...
- YEdit
YEdit YEdit is a YAML editor for Eclipse. See the wiki for more details Installation Use the Eclipse ...
- Spring核心概念之AOP
一.AOP 的概念 AOP(Aspect Oriented Programming)的缩写,面向切面编程,主要作用就是对代码进行增强处理. 理解面向切面编程的含义:就是在不改变原有程序的基础上为代码增 ...
- 用C语言制作爱心
国庆我们实验室布置了作业,其中一项为,利用流程控制语句打印以下图形 * *** ***** ******* ***** *** * 代码如下 #include <stdio.h> int ...
- PHP学习笔记:等比例缩放图片
直接上代码,imgzip($src,$newwid,$newhei)这个函数带进去的分别是原图片.缩放要求的宽度.缩放的长度.代码都备注了,不懂可以留言哈哈 <?php //压缩图片 缩略图 $ ...
- mysql awr v1.0.1发布
现发布mysql awr v1.0.1 修复问题: 1.galera cluster下flush table/index_statistcs时如果系统中业务ddl频繁可能会导致很多进程处于prepar ...
- [WF] Quickstart Sample
[WF] Quickstart Sample 前言 Workflow Foundation(WF),总是给人一种很有用.可是却不知道怎么用的印象.这主要是因为前置的功课太多.要整合很多底层知识,才能完 ...