博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
xamarin.android之 Android 4.4+ 获取图片真实路径
阅读量:6688 次
发布时间:2019-06-25

本文共 5524 字,大约阅读时间需要 18 分钟。

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[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;        }        /**          * 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

 

转载于:https://www.cnblogs.com/mycing/p/5660090.html

你可能感兴趣的文章
《软件需求工程(第2版)》一2.2 软件开发过程模型
查看>>
如何正确响应安全事件?
查看>>
Redis 在Centos Linux 上的启动脚本
查看>>
怎样维护成功的开源项目
查看>>
如何使用CRM的销售管理
查看>>
智能灯将成为最大物联网消费设备
查看>>
警惕黑客重视网络安全
查看>>
易维帮助台:企业售后服务如何高效派单
查看>>
物联网国际标准一半以上“无锡定”
查看>>
嘉峪关市与甘肃省广电网络公司对接智慧城市建设项目
查看>>
NavigationViewController 返回到根视图
查看>>
适配器模式之享元模式
查看>>
PostgreSQL 收缩膨胀表或索引 - pg_squeeze or pg_repack
查看>>
代码实现从某个表中查询数据插入到另一个表中
查看>>
提高代码质量-工具篇
查看>>
require() 源码解读
查看>>
kvm虚拟化学习笔记(十六)之kvm虚拟化存储池配置
查看>>
★Kali信息收集~ 5.The Harvester:邮箱挖掘器
查看>>
普通web项目转化为maven web项目
查看>>
java 跳出 if
查看>>