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

RxFile是一款轻量级的Android工具库,利用RxJava技术实现了从手机相册高效、流畅地获取图片和视频等功能。该库通过一系列易用的API帮助开发者避免ANR问题,同时提供了对多媒体文件的全面支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • Tamic/原创

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

Tamic出品

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 getFileExtension(final String fileName);
Observable ifExists(final String path);
Observable getThumbnail(String filePath);
Observable getVideoThumbnail(final String filePath);
Observable getVideoThumbnailFromPath(final String path, final int kind);
Observable getThumbnailFromPath(String filePath);
Observable getFileType(String filePath);
Observable getPathFromUriForFileDocument(final Context context, final Uri contentUri);
Observable getPathFromUriForImageDocument(final Context context, final String mediaDocumentId);
Observable getPathFromUriForVideoDocument(final Context context, final String mediaDocumentId);
String getMimeType(String fileName);

结束

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

项目地址:github.com/pavlospt/Rx…

更多文章可微信搜搜关注我的 公众号:开发者技术前线

区 论坛 专属问答 虫洞 小块地 AK动态 帮助 文章 搜索 ActiveX控件嵌入ReportX报表格式 2024-10-24 23:39:03 sky168 化形 赤贫Lv0 提问与回答 ActiveX控件嵌入ReportX报表格式 在 https://www.autohotkey.com/boards/viewtopic.php?t=9232看到这个报表控件挺好的,本想着自己下载注册试试效果,结果不尽人意!对代码理解得不够透彻还是设置技巧的原因,根据大佬的帖子就是显示不出来,问题如下: 1.blob: https://www.autoahk.com/b6fd0bef-baaf-4543-8700-50b32044cb23 2.blob: https://www.autoahk.com/c7ef339c-ae11-4edf-9d5f-713d65d6fe77 AHK社区源码提供如下: #NoEnv #SingleInstance force SetWorkingDir %A_ScriptDir% SetBatchLines -1 Gui, +LastFound Gui, Add, ActiveX, w700 h600 vrx, ReportProj1.ReportX Gui, Add, Button, ys , 修改单元格 Gui, Add, Button, Disabled, 获取单元格数据 Gui, Add, Button, , 显示隐藏左侧标杆 Gui, Add, Button, , 显示隐藏顶部标杆 Gui, Add, Button, , 保存 Gui, Add, Button, , 打开文件 Gui, Show ComObjConnect(rx, reportX_Envents) ; 可以注册事件 Return Button修改单元格: rx.SetCellValue(2, 3, "测试") ; 设置第2列第3行单元格的文字 rx.SetCellBackColor(2, 3, 0xEFBC13) ; 设置第2列第3行单元格的背景颜色 rx.SetCellFontColor(2, 3, 0xFFFFFF) ; 设置第2列第3行单元格的文字颜色 GuiControl, Enable, 获取单元格数据 Return Button获取单元格数据: MsgBox, % rx.GetCellValue(2, 3) Return Button显示隐藏左侧标杆: rx.PoleWidth := rx.PoleWidth ? 0 : 43 Return Button显示隐藏顶部标杆: rx.PoleHeight := rx.PoleHeight ? 0 : 17 Return Button保存: If !rxFile { FileSelectFile, rxFile, s16, , 保存文件, ReportX文件(*.rpxe) If rxFile rxFile .= (rxFile ~= "i).rpxe$") ? "" : ".rpxe" } If rxFile { rx.SaveReport(rxFile) WinSetTitle,,, % rxFile MsgBox, 64, 提示, 保存成功! } Return Button打开文件: FileSelectFile, rxFile, 1, , 打开文件, ReportX文件(*.rpxe) If rxFile { rx.OpenReport(rxFile) WinSetTitle,,, % rxFile } Return GuiDropFiles: If (A_GuiEvent ~= "i).rpxe") { rx.OpenReport(rxFile := A_GuiEvent) WinSetTitle,,, % rxFile } Return GuiClose: ExitApp 确保已注册ReportX() { static _Init := 确保已注册ReportX() If !ComObjCreate("ReportProj1.ReportX") { If FileExist("ReportX.ocx") RunWait, regsvr32 /s ReportX.ocx Else { MsgBox, 48, 错误, ReportX组件未注册、缺少文件ReportX.ocx! ExitApp } } Return True } class reportX_Envents { OnCellChanged(aCol, aRow, aCellValue) { ToolTip, % "aCol: " aCol . "`n" . "aRow: " aRow . "`n" . "aCellValue: " aCellValue } } 上述代码运行后,提示无注册类
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值