博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
极其方便的系统原生图片选取库,已适配Android 7.0
阅读量:7009 次
发布时间:2019-06-28

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

本项目由 CSDN_LQR 个人独立开发。

本库GitHub地址:

一、简述

从 Android 7.0 开始,Android SDK 中的 StrictMode 策略禁止开发人员在应用外部公开 file:// URI。具体表现为,当我们在应用中使用包含 file:// URI 的 Intent 离开自己的应用时,程序会发生故障。本人根据网上给出的适配教程,成功在图片选择及拍照方面适配上了Android 7.0,并自己封装了一个工具类,为了今后开发更加快捷,于是本库就诞生了,如果你愿意使用本库的话,只需调用本库工具类中提供的3个方法(最少),便可轻松完成拍照或图库选取图片的功能需求,且完全不需要考虑Android系统版本的问题,下面来看看如何使用本库。

二、使用

1、依赖与权限

1)依赖

compile 'com.lqr.picselect:library:1.0.1'复制代码

2)权限

复制代码

2、代码调用

1)创建LQRPhotoSelectUtils

LQRPhotoSelectUtils提供了两个构造函数,分别是:

// 可以自定义是否开启图片剪切功能(无法设置剪切大小,默认800*480)public LQRPhotoSelectUtils(Activity activity, PhotoSelectListener listener, boolean shouldCrop)// 默认开启图片剪切功能,可以指定剪切大小public LQRPhotoSelectUtils(Activity activity, PhotoSelectListener listener, int aspectX, int aspectY, int outputX, int outputY) 复制代码

这里有两个要说明的:

  1. 部分国产机无法使用图片剪切功能,例如华为TAG-AL00就阉割了图片剪切,但本人亲测小米3就可以进行图片剪切,这是系统优化差异造成的,不是本库的问题!!!
  2. 此外,就算可以进行图片剪切,也不一定可以固定图片大小,亲测小米3与坚果pro无法固定剪切图片的大小,又因为手头上没有“谷歌亲儿子”,所以没法断定是不是本库代码问题,故在此,本人建议使用第一个构造方法。

使用第一个构造方法创建LQRPhotoSelectUtils对象示例如下:

// 创建LQRPhotoSelectUtils(一个Activity对应一个LQRPhotoSelectUtils)mLqrPhotoSelectUtils = new LQRPhotoSelectUtils(this, new LQRPhotoSelectUtils.PhotoSelectListener() {    @Override    public void onFinish(File outputFile, Uri outputUri) {        // 当拍照或从图库选取图片成功后回调        mTvPath.setText(outputFile.getAbsolutePath());        mTvUri.setText(outputUri.toString());        Glide.with(MainActivity.this).load(outputUri).into(mIvPic);    }}, true);复制代码

如果你不需要图片剪切功能,只需要将构造方法的第3个参数传入false即可。

2)关联onActivityResult()

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    // 在Activity中的onActivityResult()方法里与LQRPhotoSelectUtils关联    mLqrPhotoSelectUtils.attachToActivityForResult(requestCode, resultCode, data);}复制代码

3)调用拍照或从图库选取图片方法

// 调用相机进行拍照mLqrPhotoSelectUtils.takePhoto();// 调用图库选取图片mLqrPhotoSelectUtils.selectPhoto();复制代码

4)其他设置

// 设置FileProvider的主机名mLqrPhotoSelectUtils.setAuthorities();// 修改图片的存储路径mLqrPhotoSelectUtils.setImgPath();复制代码

注意:

如果你app的build.gradle中,defaultConfig{}的applicationId对应的值不是应用包名的话就需要调用setAuthorities()方法;也设置FileProvider的主机名,这是为了适配Android 7.0。取值是applicationId对应的值+".fileprovider"。若applicationId对应的值是应用包名的话则不需理会。

4、效果

如有问题请参考本库的Demo,相信问题并不大,下面看下Demo的运行效果:

转载地址:http://nwxtl.baihongyu.com/

你可能感兴趣的文章
Windows 10创作者更新将改进蓝牙功能
查看>>
睿联嘉业边缘融合大屏幕多媒体会议系统方案
查看>>
凯立德货车专用导航 应“运”而生
查看>>
光伏组件市场价格战下谁获益?
查看>>
价格血拼战频频上演 光伏业陷入集体焦虑
查看>>
聊天机器人真正的潜力,潜藏在个人金融领域
查看>>
英特尔或推可超频Kaby Lake酷睿i3处理器: 重拾赛扬300A荣光?
查看>>
要想在未来立足 微软等软件公司就必须折本研发硬件
查看>>
个人常用网址集合
查看>>
吉林省将建东北林业大数据中心
查看>>
从互联网到物联网:下一个创新风口到来
查看>>
郭台铭:苹果亚马逊已提供资金 协助富士康收购东芝闪存
查看>>
美40家互联网巨头联合致信特朗普:今后你该这么做
查看>>
记一次磁盘性能测试
查看>>
运营商应对VoIP数据业务是突围之路
查看>>
光伏逆变器竞争格局再重塑?又一条“鲶鱼”出现
查看>>
CYQ.Data 轻量数据访问层(六) 构造数据表
查看>>
超融合的未来发展与使用案例
查看>>
这是数据中心最好的时代,也是最坏的时代
查看>>
QTP使用中的陷阱
查看>>