一、URI 

  通用资源标志符(Universal Resource Identifier, 简称"URI")。

  Uri代表要操作的数据,Android上可用的每种资源 - 图像、视频片段等都可以用Uri来表示。

  URI一般由三部分组成:

    访问资源的命名机制。 

    存放资源的主机名。 

    资源自身的名称,由路径表示。 

  Android的Uri由以下三部分组成: "content://"、数据的路径、标示ID(可选)

  举些例子,如: 

    所有联系人的Uri: content://contacts/people

    某个联系人的Uri: content://contacts/people/5

    所有图片Uri: content://media/external

    某个图片的Uri:content://media/external/images/media/4

 

  二、内部保存

  首先我们来看一下android是如何管理多媒体文件(音频、视频、图片)的信息。通过DDMS,我们在/data/data/com.android.providers.media下找到数据库文件

  

  打开external.db文件进一步查看:在media表格下,可以看到文件路径(_data)和Uri的标示ID(_id)的对应关系。

  

  三、相互转换

   1.从URI获得文件路径

    string  myImageUrl = "content://media/external/images/media/***";    Uri uri = Uri.parse(myImageUrl);        String[] proj = { MediaStore.Images.Media.DATA };       Cursor actualimagecursor = this.ctx.managedQuery(uri,proj,null,null,null);      int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);       actualimagecursor.moveToFirst();           String img_path = actualimagecursor.getString(actual_image_column_index);      File file = new File(img_path);    Uri fileUri = Uri.fromFile(file);

  2.由文件路径得到URI

Uri mUri = Uri.parse("content://media/external/images/media");             Uri mImageUri = null;            Cursor cursor = managedQuery(                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null,                    null, MediaStore.Images.Media.DEFAULT_SORT_ORDER);            cursor.moveToFirst();            while (!cursor.isAfterLast()) {                String data = cursor.getString(cursor                        .getColumnIndex(MediaStore.MediaColumns.DATA));                if (picPath.equals(data)) {                    int ringtoneID = cursor.getInt(cursor                            .getColumnIndex(MediaStore.MediaColumns._ID));                    mImageUri = Uri.withAppendedPath(mUri, ""                            + ringtoneID);                    break;                }                cursor.moveToNext();            }
   3.加载本地路径中的文件

webview.loadUrl("content://com.android.htmlfileprovider/sdcard/test.html");


更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  6. 一款霸榜 GitHub 的开源 Linux 资源监视器!
  7. Android学习系列之(二)项目目录结构基本介绍
  8. Android打包APK流程及原理
  9. Android应用开发提高篇(5)-----Camera使用

随机推荐

  1. Android开发之GridView属性介绍
  2. mac 安装Android studio遇到的问题及解决
  3. Android设备管理器漏洞
  4. Android(安卓)水波效果原理与实现
  5. 后台动态添加布局文件、控件与动态设置属
  6. Android调用系统摄像头拍照并剪裁压缩
  7. android 中文 api (43) —— Chronometer
  8. Android studio 无法启动安卓模拟器
  9. Android 百分比布局
  10. 在Android中调用动态库文件(*.so)