安卓 java 视频_安卓实战项目-动态桌面-rxjava实现搜索本地所有视频

前言:上一篇文章已经实现了将assets文件中设置成动态壁纸:安卓实战项目-动态桌面-简单实现

需求:既然assets文件能用于动态桌面,那么手机中的视频也可以吧,有没有大胆的想法?

上效果图:

6881a3f5ddc300b9a269c80dc39fecbc.gif

分析:

1,类似于上面图片的搜索效果,通过点击button,搜索出我们需要的文件(图片中用list演示),此时用到了递归遍历搜索所有文件夹,终止条件就是文件。

2,对于输入框中的内容进行处理,分析输入框内容,根据内容匹配相应的文件,并展示出来;

RxJava:原理是观察者模式,举个例子,两个人a,b;a是城墙烽火台守卫,b是城池内护卫;a守卫的职责便是观望敌军有没有进犯,如果发现了,就放烽火,然后b护卫就能知道有敌军,然后调兵支援;在我们的搜索视频中也是这样,一个线程不停的搜索文件,当看到.mp4视频文件时,就发送信号,我们的list收到信号以后,就会调用list.add()添加这个视频;最后搜索完所有文件夹,线程就发信号我搜索完了,然后我们的界面的recyclerview就可以填充list中的数据啦。纯属个人理解的rxjava,有啥不对,欢迎指正哈(温柔点)!

上代码:

//添加依赖,两个,一个rxjava,一个rxandroid

compile 'io.reactivex.rxjava2:rxjava:2.1.0'

compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

//这个就不解释了,以前的listview升级版

compile 'com.android.support:recyclerview-v7:25.3.1'

java代码:

搜索文件:这里的返回结果是:存在的,可读的,不大不小的视频文件

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{

//当是文件的时候就开始判断这个文件是不是存在,是不是视频文件,是不是可读,还有的话太小的太大我们都不要,规则tools类自己定义,全是boolean类型的别搞错了

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 {

//调用上面的方法,返回我们需要的视频文件

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

//上面找到一个我们需要的视频,就会调用onNext,到这里,video是arraylist

videos.add(bean);

//找到一个,recyclerview就展示一个

view.showResult(videos);

}

@Override

public void onError(@NonNull Throwable e) {

System.out.println("onError");

}

@Override

public void onComplete() {

System.out.println("onComplete");

//当搜索完以后,我们的界面还可以Toast一下,告诉用户我们搜索完毕,增加用户体验

}

});

总体思路:搜索出需要的视频文件,传到list中,view展示出来!

好了代码就不上了,根据上面思路多练练,rxjava我也不怎么了解,自己多研究一下哈!

最后终极版本已提交企鹅宝求给五星好评,以后的文章就是一步步拆分这个这应用,包括服务器的搭建,数据添加!谢谢支持应用链接,点击前往

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值