前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RxFile 一款选择多媒体文件的精巧的工具

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

作者头像
开发者技术前线
发布2020-11-23 15:38:12
4440
发布2020-11-23 15:38:12
举报

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

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

集成

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

代码语言:javascript
复制
compile 'com.github.pavlospt:rxfile:1.5'

使用

1 开启LOG日志

代码语言:javascript
复制
RxFile.setLoggingEnabled(true);

2 从ClipData获取多个文件

代码语言:javascript
复制
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对媒体文件

代码语言:javascript
复制
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的文件随着时间发展会变的超级大,因为它可能导致相机因为存储空间不够无法照相、蓝牙无法传送文件等。有时候我们需要读取这个这个文件来进行某些操作。

代码语言:javascript
复制
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

忍不住支持下

相关推荐

你不知道的Retrofit缓存库RxCache

技术 - 思维 - 成长

END

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开发者技术前线 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档