19. 大文件传输功能
19.1. 创建大文件
用于创建大文件,比如:音乐文件,表盘文件,图片等
//Step1. 创建文件操作实现类
FileOpImpl fileOp = FileOpImpl.instance(RCSPController.getInstance().getRcspOp());
//Step2. 调用创建大文件的接口
//file --- 文件
final List<SDCardBean> onlineStorages = fileOp.getOnlineStorage();
SDCardBean storage = null;
if (null != onlineStorages) {
for (SDCardBean sdCardBean : onlineStorages) {
// 根据功能需求选择在线的合适的句柄对象即可。
// 这里是演示传输彩屏仓屏幕保护程序,因此,选择在线的Flash存储介质
if (sdCardBean.isFlash() && sdCardBean.isOnline()) {
storage = sdCardBean;
break;
}
}
}
if (null == file || null == storage) return;
CreateFileParam param = new CreateFileParam(RCSPController.getInstance().getUsingDevice(), file, storage);
fileOp.createBigFile(param, new OnTaskStateListener() {
@Override
public void onStart() {
//回调大文件传输开始
}
@Override
public void onProgress(int progress) {
//回调大文件传输进度
}
@Override
public void onStop() {
//回调大文件传输结束
}
@Override
public void onCancel(int reason) {
//回调大文件传输被中止
}
@Override
public void onError(int code, String message) {
//回调大文件传输异常
//code --- 错误码
//message --- 错误描述
}
});
Note
大文件传输不能和其他耗时任务同时进行,比如:文件浏览,来电等
大文件传输的文件必须保证存在,并可读取
存储器信息, SDCardBean
创建文件参数, CreateFileParam
19.1.1. CreateFileParam
public class CreateFileParam {
/**
* 输入文件
*/
@NonNull
private final File file;
/**
* 输出存储器
*/
@NonNull
private final SDCardBean storage;
/**
* 输出路径
*/
@NonNull
private final String output;
/**
* 最大重命名次数
*/
private int maxRenameNum = 30;
/**
* 是否使用其他编码方式
*
* <p>
* 默认false,编码方式如下:<br/>
* - 短文件名: GBK {@link Charset#forName(String)}<br/>
* - 长文件名: 增加"\\U" + Unicode编码数据 + 结束符, {@link Charset#forName(String)}
* 若为true, 则{@link #encodeType} 属性生效
* </p>
*/
private boolean isOtherEncode = false; //是否使用其他编码方式
/**
* 编码方式
*
* <strong>1. 注意需要{@link #isOtherEncode} 为 true, 字段才生效</strong>
*/
private String encodeType = StandardCharsets.UTF_16LE.name(); //默认编码方式
}
19.2. 取消大文件传输
用于取消正在进行的大文件传输
//Step1. 创建文件操作实现类
FileOpImpl fileOp = FileOpImpl.instance(RCSPController.getInstance().getRcspOp());
//Step2. 调用取消大文件传输的接口
//只有在大文件传输中才会成功,可以用 fileOp.isFileOperating(); 来判断是否在文件操作
fileOp.cancelBigFileTransfer(RCSPController.getInstance().getUsingDevice(), 0, new OnRcspActionCallback<Boolean>() {
@Override
public void onSuccess(BluetoothDevice device, Boolean message) {
//回调操作成功 和 结果
}
@Override
public void onError(BluetoothDevice device, BaseError error) {
//回调操作失败 和 错误信息
}
});