RxFile 一款选择多媒体文件的精巧的工具

Stella981
• 阅读 629

点击标题下「蓝色微信名」可快速关注

RxJava对于Java和android开发者已经是耳熟能详的技术了,RxJava的异步通讯技术更是让开发者们青睐,本文就带来一款通过RxJava实现的选择手机相册来获取多媒体的工具RxFile。

RxFile 一款选择多媒体文件的精巧的工具

RxFile是一款从安卓设备获取图片或者视频的工具类,让你的需要读取相册返回图片功能更流畅,并防止ANR现象。RxFile是国外的名叫Tournaris 写的,本文开始介绍怎么使用RxFIle。

集成

在Gradle 的 jCenter()mavenCentral()``添加下面依赖:

compile 'com.github.pavlospt:rxfile:1.5'

使用

 1 开启LOG日志

RxFile.setLoggingEnabled(true);

  2 从ClipData获取多个文件

RxFile.createFilesFromClipData(this,clipData)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<List<File>>() {                                        @Override
                    public void onCompleted() {                                              Timber.e("onCompleted() for Files called");
                    }                                        @Override
                    public void onError(Throwable e) {                                              Timber.e("Error on files fetching:" + e.getMessage());
                    }                                        @Override
                    public void onNext(List<File> files) {                                             Timber.e("Files list size:" + files.size());                                             for(File f : files){                                                    Timber.e("onNext() file called:" + f.getAbsolutePath());
                        }
                    }
                });

3  通过URI对媒体文件

RxFile.createFileFromUri(this,uri)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<File>() {                    @Override
                    public void onCompleted() {                        Timber.e("onCompleted() for File called");
                    }                                        @Override
                    public void onError(Throwable e) {                        Timber.e("Error on file fetching:" + e.getMessage());
                    }                                        @Override
                    public void onNext(File file) {                        Timber.e("onNext() file called:" + file.getAbsolutePath());
                    }
                });

3  通过URI获取大文件Thumball

相信安卓用户都深有体会,有个叫.thumbnails的文件随着时间发展会变的超级大,因为它可能导致相机因为存储空间不够无法照相、蓝牙无法传送文件等。有时候我们需要读取这个这个文件来进行某些操作。

RxFile.getThumbnail(this,data)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Bitmap>() {                                       @Override
                    public void onCompleted() {                                               Timber.e("onCompleted() called");
                    }                                        @Override
                    public void onError(Throwable e) {                                               Timber.e("onError called with: " +  e.getMessage());
                    }                                        @Override
                    public void onNext(Bitmap bitmap) {
                        mBitmap.setImageBitmap(bitmap);
                    }
                });

更多API

以下是RXFile提供的一些上层可调用的方法,你可以通过这些方法来从不同渠道获取不同的文件格式,让你面对相册,视频选择的需求时候是不再头痛。

  • Observable<String> getFileExtension(final String fileName);

  • Observable<Boolean> ifExists(final String path);

  • Observable<Bitmap> getThumbnail(String filePath);

  • Observable<Bitmap> getVideoThumbnail(final String filePath);

  • Observable<Bitmap> getVideoThumbnailFromPath(final String path, final int kind);

  • Observable<Bitmap> getThumbnailFromPath(String filePath);

  • Observable<String> getFileType(String filePath);

  • Observable<String> getPathFromUriForFileDocument(final Context context, final Uri contentUri);

  • Observable<String> getPathFromUriForImageDocument(final Context context, final String mediaDocumentId);

  • Observable<String> getPathFromUriForVideoDocument(final Context context, final String mediaDocumentId);

  • String getMimeType(String fileName);

结束

RxFile是非常轻的一个框架,Rxfile代码只有616行,因此在你开发的时候 根本不需要关心package大小过大问题。也能解决读取图片导致卡死或者Anr的现象。RxFIle原理非常简单,入门了RxJava的基本都能自己写RxFIle。

项目地址:https://github.com/pavlospt/RxFile

忍不住支持下

RxFile 一款选择多媒体文件的精巧的工具

相关推荐

你不知道的Retrofit缓存库RxCache

技术 - 思维 - 成长

END

RxFile 一款选择多媒体文件的精巧的工具

本文分享自微信公众号 - 开发者技术前线(China_DevTech)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
3年前
ClickHouse大数据领域企业级应用实践和探索总结
点击上方蓝色字体,选择“设为星标”回复”资源“获取更多资源!(https://oscimg.oschina.net/oscnet/bb00e5f54a164cb9827f1dbccdf87443.jpg)!(https://oscimg.oschina.net/oscnet/dc8da835ff1b4
Stella981 Stella981
3年前
200的大额人民币即将面世?央行:Yes!
点击上方蓝字关注我们!(https://oscimg.oschina.net/oscnet/2a1c2ac00bf54458a78c48a6c2e547d5.png)点击上方“印象python”,选择“星标”公众号重磅干货,第一时间送达!!(
Stella981 Stella981
3年前
Linux 是如何管理内存的?
点击蓝色“Java建设者”关注我哟加个“星标”,及时阅读最新技术文章!(https://oscimg.oschina.net/oscnet/df3cbbbafd5ae35c3c30f1b0081db3e740f.png)这是Java建设者第106篇原创文章Linux内存管理模型非常直接明了,因为Lin
Wesley13 Wesley13
3年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。