RxFile 一款選擇多媒體文件精巧的工具類

RxJava對于Java和android開發(fā)者已經(jīng)是耳熟能詳?shù)募夹g(shù)了,RxJava的異步通訊技術(shù)更是讓開發(fā)者們青睞,本文就帶來一款通過RxJava實現(xiàn)的選擇手機相冊來獲取多媒體的工具RxFile。

Tamic出品

RxFile是一款從安卓設(shè)備獲取圖片或者視頻的工具類,讓你的需要讀取相冊返回圖片功能更流暢,并防止ANR現(xiàn)象。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的文件隨著時間發(fā)展會變的超級大,因為它可能導(dǎo)致相機因為存儲空間不夠無法照相、藍牙無法傳送文件等。有時候我們需要讀取這個這個文件來進行某些操作。

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提供的一些上層可調(diào)用的方法,你可以通過這些方法來從不同渠道獲取不同的文件格式,讓你面對相冊,視頻選擇的需求時候是不再頭痛。

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);

結(jié)束

RxFile是非常輕的一個框架,Rxfile代碼只有616行,因此在你開發(fā)的時候 根本不需要關(guān)心package大小過大問題。也能解決讀取圖片導(dǎo)致卡死或者Anr的現(xiàn)象。RxFIle原理非常簡單,入門了RxJava的基本都能自己寫RxFIle。

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

更多文章可微信搜搜關(guān)注我的 公眾號:開發(fā)者技術(shù)前線

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容