Meetrue

获取图片视频的URI处理(含KitKat+)

获取视频资源URL处理

问题现象:

在dzb项目中,发布活动—>添加视频或图片,有的手机上会报错,错误提示查找资源时取值出现问题Cursor

产生问题原因:

  • 前提1. KitKat之后版本中无法操作外置Sdcard,详细内容参考:外部存储权限
  • 前提2. SAF,Android4.4中引入了Storage Access Framework存储访问框架,简称(SAF)。该框架是为了符合前提1的权限控制实现的。通过各种DocumentProvider(ContentProvider的子类)来向外提供资源。详细内容参考:android存储访问框架Storage Access Framework

    有了以上两个前提,就可以判断出问题的原因:

因为有了documentProvider,所以有了和以前不一样的URI,格式如content://com.android.providers.media.documents/document/video%3A358817
而我们现有代码处理的URI还是默认为原contentProvider的uri,格式如content://media/external/video/media/263262
用同样的方式去找资源就会出错

解决方式:

拿到URI以后,判断到底是属于哪种类型的,根据不同类型采取不同的方法

以下是GIT上开源的一个例子,getpath()方法最终要实现的是拿到文件的路径,在其它项目中可以根据需要进行修改

 
 

示意图