Android4.4中获取资源路径问题
来源:互联网 发布:去掉excel数据的阴影 编辑:程序博客网 时间:2024/06/05 23:04
关于Android4.4的图片路径获取,如果回来的Uri的格式有两种
- content://com.android.providers.media.documents/document/image:3951
- content://media/external/images/media/3951
出现第一种Uri的操作方式如下图所示:
直接点选最近的图片,应该是Android4.4 特有的Api
.
找到了一个更全面的方案
- /**
- * Get a file path from a Uri. This will get the the path for Storage Access
- * Framework Documents, as well as the _data field for the MediaStore and
- * other file-based ContentProviders.
- *
- * @param context The context.
- * @param uri The Uri to query.
- * @author paulburke
- */
- public static String getPath(final Context context, final Uri uri) {
- final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
- // DocumentProvider
- if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
- // ExternalStorageProvider
- if (isExternalStorageDocument(uri)) {
- final String docId = DocumentsContract.getDocumentId(uri);
- final String[] split = docId.split(":");
- final String type = split[0];
- if ("primary".equalsIgnoreCase(type)) {
- return Environment.getExternalStorageDirectory() + "/" + split[1];
- }
- // TODO handle non-primary volumes
- }
- // DownloadsProvider
- else if (isDownloadsDocument(uri)) {
- final String id = DocumentsContract.getDocumentId(uri);
- final Uri contentUri = ContentUris.withAppendedId(
- Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
- return getDataColumn(context, contentUri, null, null);
- }
- // MediaProvider
- else if (isMediaDocument(uri)) {
- final String docId = DocumentsContract.getDocumentId(uri);
- final String[] split = docId.split(":");
- final String type = split[0];
- Uri contentUri = null;
- if ("image".equals(type)) {
- contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
- } else if ("video".equals(type)) {
- contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
- } else if ("audio".equals(type)) {
- contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
- }
- final String selection = "_id=?";
- final String[] selectionArgs = new String[] {
- split[1]
- };
- return getDataColumn(context, contentUri, selection, selectionArgs);
- }
- }
- // MediaStore (and general)
- else if ("content".equalsIgnoreCase(uri.getScheme())) {
- return getDataColumn(context, uri, null, null);
- }
- // File
- else if ("file".equalsIgnoreCase(uri.getScheme())) {
- return uri.getPath();
- }
- 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, Uri uri, String selection,
- String[] selectionArgs) {
- Cursor cursor = null;
- final String column = "_data";
- final String[] projection = {
- column
- };
- try {
- cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
- null);
- if (cursor != null && cursor.moveToFirst()) {
- final int column_index = cursor.getColumnIndexOrThrow(column);
- return cursor.getString(column_index);
- }
- } finally {
- if (cursor != null)
- cursor.close();
- }
- return null;
- }
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is ExternalStorageProvider.
- */
- public static boolean isExternalStorageDocument(Uri uri) {
- return "com.android.externalstorage.documents".equals(uri.getAuthority());
- }
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is DownloadsProvider.
- */
- public static boolean isDownloadsDocument(Uri uri) {
- return "com.android.providers.downloads.documents".equals(uri.getAuthority());
- }
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is MediaProvider.
- */
- public static boolean isMediaDocument(Uri uri) {
- return "com.android.providers.media.documents".equals(uri.getAuthority());
- }
转载:http://blog.csdn.net/huangyanan1989/article/details/17263203
来源:http://stackoverflow.com/questions/20067508/get-real-path-from-uri-android-kitkat-new-storage-access-framework
开源项目:https://github.com/iPaulPro/aFileChooser
0 0
- Android4.4中获取资源路径问题
- Android4.4中获取资源路径问题
- Android4.4中获取资源路径问题
- 解决android4.4以上获取不到图片路径问题
- java获取资源路径问题
- Java 中获取资源(文件)的路径问题总结
- 关于android4.0以后,SD卡路径获取问题
- JavaWeb中获取资源文件路径
- Servlet中获取类路径下资源
- 获取项目中Classpath中的资源路径
- android4.4版本获取图片问题:
- Java中获取资源问题
- Android4.4获取多媒体(图片,声音,视频)路径
- web项目中获取资源及资源路径
- java中获取路径问题
- Android4.0 adb 路径问题
- Android4.1 SDcard路径问题
- css和js中资源路径问题
- ASP.NET是如何在IIS下工作的
- 关于C++标准库中的 Map 和 hash_map 知识点小总结
- 模块管理常规功能自定义系统的设计与实现(27--多个模块之间的关联[3])
- proc出错问题
- 初探socket编程
- Android4.4中获取资源路径问题
- apache做虚拟服务器
- RCP 给View增加菜单
- 解决android.view.WindowManager$BadTokenException: Unable to add window -- token .
- hierarchyviewer不能用的解决办法
- CKEditor使用
- windows下mysql忘记root密码的解决方法
- 2014年4月操作系统份额:Windows XP仍然在26%以上,Linux微涨
- V4L2文档翻译(十三)