QFsolution

  1. 适用于AndroidQ的简易图片选择器。
  2. 基于协程的系统文件选择,系统拍照,系统裁剪。
  3. Uri转为File的究极解决方案。

开始使用

添加依赖

allprojects {repositories {maven { url "https://jitpack.io" }}
}
dependencies {implementation 'com.github.iDeMonnnnnn:QFsolution:$latest_version'
}

添加权限

    <!--如果你使用相机相关功能必须要添加,否则可忽略--><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

效果动图

下载Demo.apk体验

使用方法

图片选择器

1.在启动图片选择器之前,你需要初始化图片加载器,你可以参考示例代码的GlideLoader
,实现IQFImgLoader接口,此举是为了解决不同项目的使用不同图片加载库的问题和减少库体积。

QFImgLoader.getInstance().init(GlideLoader()) //初始化图片加载器

2.配置参数,启动图片选择库。

QFHelper.getInstance().isNeedGif(false) //是需要gif,默认false.isNeedCamera(true)  //是否需要拍照选项,默认true.setSpanCount(3) //每行显示多少张图片,默认&建议:3, 可根据手机分辨率实际情况大小进行调整.setLoadNum(30) //设置分页加载每次加载多少张图片,默认&建议:30,可根据手机分辨率实际情况大小进行调整,注意:该值最少应该保证首次加载充满全屏,否则无法加载更多.setMaxNum(9) //设置可选择最多maxNum张图片,默认&最小值:1.start(this, 0x001) //第一个参数:activity或者fragment,第二个参数requestCode

3.获取选取图片后的结果

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {super.onActivityResult(requestCode, resultCode, data)if (resultCode == RESULT_OK) {when (requestCode) {0x001 -> {val uris = QFHelper.getInstance().getResult(data) //获取选择结果,ArrayList<Uri>uris?.run {uri = this[0]img.setImageURI(uri)}}}}}

文件操作

本库的文件操作包括系统文件选择,系统拍照,系统裁剪三种。都是基于携程+GhostFragment的方式,因此需要在协程中使用,操作完成后可直接获取到返回值。

返回值根据泛型类型返回对应类型的结果:Uri:文件的Uri对线,File:文件对象,String:文件的绝对路径。

更多使用细节,可见源码注释,写的很详细。

1.系统文件选择

GlobalScope.launchUI {
uri = openFile<String>()?.run {  File(this).toUri() }
img.setImageURI(uri)
}

2.系统拍照

GlobalScope.launchUI {uri = gotoCamera(fileName = "DeMon-${System.currentTimeMillis()}.jpg")img.setImageURI(uri)
}

3.系统裁剪

GlobalScope.launchUI {uri?.run {uri = startCrop(this, 300, 600)img.setImageURI(uri)}
}

Uri转File

如何获取content://URI格式的Uri文件获取对应的File对象,一直是日常开发中的痛点,网上各种解决方案都不尽人意,本库旨在适配各种可能存在的情况,如果还是获取不到会将该Uri写入沙盒环境,
再获取对应的File对象,这样基本能100%保证获取到Uri的File对象。

AndroidQ开始无法访问非作用域存储内的文件(沙盒环境),只能通过Uri去访问文件,因此访问外部存储文件只能,按照如上方法通过将Uri写入沙盒环境成新文件,再获取File。

使用本库的uriToFile扩展方法即可,如下:

  val file: File? = uri.uriToFile(this@MainActivity)

更多使用详情,请见Demo示例及源码

致谢

Android 10适配要点,作用域存储

boxing

AndroidQ的文件操作解决方案相关推荐

  1. asp.net2.0导出pdf文件完美解决方案【月儿原创】

    asp.net2.0导出pdf文件完美解决方案 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.5.28 PDF简介:PDF(P ...

  2. VC 文件操作大全,打开,保存,复制,删除,查找等

    各种关于文件的操作在程序设计中十分常见,如果能对这些操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而可以在较短的时间内编写出高效 的代码.本文对Visual C++中有关文件操作进行了全面的 ...

  3. MFC文件操作大全,打开,保存,复制,删除,查找等

    各种关于文件的操作在程序设计中十分常见,如果能对这些操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而可以在较短的时间内编写出高效 的代码.本文对Visual C++中有关文件操作进行了全面的 ...

  4. python 目录和文件操作

    移动文件夹: 会自动创建目标文件夹 shutil.move(full_path, despath) python 操作txt 写入列表参见我的博客: python 操作txt 写入列表_jacke12 ...

  5. modelsim读取文件中的数据_modelsim中的文件操作—— 大数据测试

    在modelsim中不可避免的需要进行文件操作,在窗口中查看代码的操作情况,下面是我自己M序列实验中的一段测试代码 integer i,j ,k,m; integer m_dataFILE , ind ...

  6. Windows——桌面快捷键Ctrl+Z撤销的文件恢复解决方案

    问题描述 新建了一个文件夹,并在里面新建了一个word,然后又复制了一个 然后想撤销这个复制的,使用快捷键Ctrl+Z撤销操作,但是电脑太卡了,多按了两下. 然后,副本消失了,其他文档以及新建文件夹都 ...

  7. python文件操作的一般步骤_Python基础之文件操作

    ​ 应用程序运行过程中产生的数据最先都是存放于内存中的,若想永久保存下来,必须要保存于硬盘中.应用程序若想操作硬件必须通过操作系统,而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念,用户或应用程序 ...

  8. python文件处理seek_python文件操作 seek(),tell()

    seek():移动文件读取指针到指定位置 tell():返回文件读取指针的位置 seek()的三种模式: (1)f.seek(p,0)  移动当文件第p个字节处,绝对位置 (2)f.seek(p,1) ...

  9. python如何使用文件_Python的文件操作

    文件的操作,归根结底就只有两种:打开文件.操作文件 一.打开文件:文件句柄= open('文件路径','模式') python中打开文件有两种方式,即:open(...) 和  file(...),本 ...

最新文章

  1. ES既是搜索引擎又是数据库?真的有那么全能吗?
  2. php程序监控指标,通达信主力动向监控副图指标公式
  3. 操作集锦【牛客网】 牛客练习赛60
  4. 工作338:pc重置筛选条件
  5. Jquery实现无限级树状结构并动态添加增删改等编辑功能
  6. GitHub#algorithm#:《剑指offer》 的50道面试题
  7. shell的执行顺序问题
  8. 在Java中将字符串转换为日期,将日期转换为字符串
  9. mysql 5.7 binlog 压缩_MySQL binlog 压缩功能的相关介绍-爱可生
  10. python怎么用反三角函数_反三角函数怎么用
  11. 全国城市三级联动-java版
  12. 基于模糊集的图像增强
  13. VMware安装Linux详细教程
  14. [PHP]PHP爬虫 - URP教务
  15. 论文笔记(十六):Learning to Walk in Minutes Using Massively Parallel Deep Reinforcement Learning
  16. CPS1848调节信号质量
  17. Java设计模式入门
  18. Synergistic Saliency and Depth Prediction for RGB-D Saliency Detection
  19. New Year and Hurry
  20. 精讲CS231N斯坦福计算机视觉公开课笔记

热门文章

  1. 解决gpg: Can't check signature: public key not found问题
  2. 合并工作簿——《超级处理器》应用
  3. html模板 图片文列表,图片列表模板
  4. 攻防世界(misc)---pdf
  5. 大象做梦传媒2022企业公司创意年会邀请函范文
  6. 分割为mesh之后的地形shader编写——2
  7. android 传统蓝牙
  8. 案例:从键盘输入本组学员的人数,和本组学员的姓名,用数组存储姓名,然后再从键盘输入一个姓名,查找它是否在之前的数组中,如果存在,就显示它的下标
  9. 如何进入PageAdmin CMS 安装界面
  10. archlinux 安装过程(详细)