国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

安卓實(shí)戰(zhàn)項(xiàng)目-動(dòng)態(tài)桌面-rxjava實(shí)現(xiàn)搜索本地所有視頻

james / 3245人閱讀

摘要:前言上一篇文章已經(jīng)實(shí)現(xiàn)了將文件中設(shè)置成動(dòng)態(tài)壁紙安卓實(shí)戰(zhàn)項(xiàng)目動(dòng)態(tài)桌面簡(jiǎn)單實(shí)現(xiàn)需求既然文件能用于動(dòng)態(tài)桌面,那么手機(jī)中的視頻也可以吧,有沒(méi)有大膽的想法上效果圖分析,類似于上面圖片的搜索效果,通過(guò)點(diǎn)擊,搜索出我們需要的文件圖片中用演示,此時(shí)用到

前言:上一篇文章已經(jīng)實(shí)現(xiàn)了將assets文件中設(shè)置成動(dòng)態(tài)壁紙:安卓實(shí)戰(zhàn)項(xiàng)目-動(dòng)態(tài)桌面-簡(jiǎn)單實(shí)現(xiàn)

需求:既然assets文件能用于動(dòng)態(tài)桌面,那么手機(jī)中的視頻也可以吧,有沒(méi)有大膽的想法?

上效果圖:

分析:
1,類似于上面圖片的搜索效果,通過(guò)點(diǎn)擊button,搜索出我們需要的文件(圖片中用list演示),此時(shí)用到了遞歸遍歷搜索所有文件夾,終止條件就是文件。
2,對(duì)于輸入框中的內(nèi)容進(jìn)行處理,分析輸入框內(nèi)容,根據(jù)內(nèi)容匹配相應(yīng)的文件,并展示出來(lái);

RxJava:原理是觀察者模式,舉個(gè)例子,兩個(gè)人a,b;a是城墻烽火臺(tái)守衛(wèi),b是城池內(nèi)護(hù)衛(wèi);a守衛(wèi)的職責(zé)便是觀望敵軍有沒(méi)有進(jìn)犯,如果發(fā)現(xiàn)了,就放烽火,然后b護(hù)衛(wèi)就能知道有敵軍,然后調(diào)兵支援;在我們的搜索視頻中也是這樣,一個(gè)線程不停的搜索文件,當(dāng)看到.mp4視頻文件時(shí),就發(fā)送信號(hào),我們的list收到信號(hào)以后,就會(huì)調(diào)用list.add()添加這個(gè)視頻;最后搜索完所有文件夾,線程就發(fā)信號(hào)我搜索完了,然后我們的界面的recyclerview就可以填充list中的數(shù)據(jù)啦。純屬個(gè)人理解的rxjava,有啥不對(duì),歡迎指正哈(溫柔點(diǎn))!

上代碼:

    //添加依賴,兩個(gè),一個(gè)rxjava,一個(gè)rxandroid
    compile "io.reactivex.rxjava2:rxjava:2.1.0"
    compile "io.reactivex.rxjava2:rxandroid:2.0.1"
    //這個(gè)就不解釋了,以前的listview升級(jí)版
    compile "com.android.support:recyclerview-v7:25.3.1"

java代碼:
搜索文件:這里的返回結(jié)果是:存在的,可讀的,不大不小的視頻文件

public Observable searchVideoFiles(File file) {

        //遍歷遞歸文件夾
        if(file.isDirectory()){
            return Observable.fromArray(file.listFiles()).flatMap(new         Function>() {
                @Override
                public ObservableSource apply(@NonNull File file) throws Exception {
                    return searchVideoFiles(file);
                }

            });
        }else{
        //當(dāng)是文件的時(shí)候就開(kāi)始判斷這個(gè)文件是不是存在,是不是視頻文件,是不是可讀,還有的話太小的太大我們都不要,規(guī)則tools類自己定義,全是boolean類型的別搞錯(cuò)了
            return Observable.just(file).filter(new Predicate() {
                @Override
                public boolean test(@NonNull File file) throws Exception {
                    //獲取文件的類型
                    String mimeType = Tools.getMimeType(file.getName());
                    return file.exists()&&file.canRead()&&Tools.isVideo(mimeType)&&Tools.passSmallAndBigFile(file.length());
                }
            });
        }
    }
//rootFile 指的是根目錄,也就是我們要遍歷的文件夾
Observable.just(rootFile)
                .flatMap(new Function>() {
                    @Override
                    public ObservableSource apply(@NonNull File file) throws Exception {
                         //調(diào)用上面的方法,返回我們需要的視頻文件
                        return searchVideoFiles(file);
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {
                        System.out.println("onSubscribe");
                    }

                    @Override
                    public void onNext(@NonNull File file) {
                        String name = file.getName();
                        String absolutePath = file.getAbsolutePath();
                        String fileSize = Tools.getFileSize(file.length());
                        VideoBean bean = new VideoBean(name, absolutePath, fileSize);
                        //上面找到一個(gè)我們需要的視頻,就會(huì)調(diào)用onNext,到這里,video是arraylist
                        videos.add(bean);
                        //找到一個(gè),recyclerview就展示一個(gè)
                        view.showResult(videos);

                    }

                    @Override
                    public void onError(@NonNull Throwable e) {
                        System.out.println("onError");
                        
                    }

                    @Override
                    public void onComplete() {
                        System.out.println("onComplete");
                       //當(dāng)搜索完以后,我們的界面還可以Toast一下,告訴用戶我們搜索完畢,增加用戶體驗(yàn)
                    }
                });

總體思路:搜索出需要的視頻文件,傳到list中,view展示出來(lái)!

好了代碼就不上了,根據(jù)上面思路多練練,rxjava我也不怎么了解,自己多研究一下哈!
最后終極版本已提交企鵝寶求給五星好評(píng),以后的文章就是一步步拆分這個(gè)這應(yīng)用,包括服務(wù)器的搭建,數(shù)據(jù)添加!謝謝支持應(yīng)用鏈接,點(diǎn)擊前往

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67741.html

相關(guān)文章

  • 快速開(kāi)發(fā)android,離不開(kāi)這10個(gè)優(yōu)秀的開(kāi)源項(xiàng)目

    摘要:作為一名菜雞,時(shí)常瞻仰大佬們的開(kāi)源項(xiàng)目是非常必要的。后臺(tái)部分在這地址動(dòng)漫你的名字同款開(kāi)源,原文效果圖簡(jiǎn)詩(shī)地址一款優(yōu)雅的中國(guó)風(fēng)記錄,包括端和端原文相關(guān)博客如何在一天之內(nèi)完成一款具備屬性的產(chǎn)品簡(jiǎn)書地址一個(gè)基于豆瓣仿網(wǎng)易云音樂(lè)的開(kāi)源項(xiàng)目。 作為一名菜雞Android,時(shí)常瞻仰大佬們的開(kāi)源項(xiàng)目是非常必要的。這里我為大家收集整理了10個(gè)優(yōu)秀的開(kāi)源項(xiàng)目,方便我們?nèi)粘i_(kāi)發(fā)中學(xué)習(xí)! 作者:Listen...

    wangshijun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<