鸿蒙 Preview Kit(文件预览服务)
·
一、Preview Kit
1.1 核心能力
| 能力 | 说明 |
|---|---|
| 文件预览 | 快速启动预览界面,对图片、视频、音频、文本、html等文件进行内容查看 |
| 文件打开加速 | 预加载机制提前加载文件,缩短打开时间(仅2in1设备) |
| 通用文件缓存加速 | 缓存解码数据到磁盘,再次打开时无需重复解码 |
1.2 文件预览特点
-
支持选中多文件,在预览列表切换显示
-
支持文件分享
-
支持“使用其他应用打开”跳转到具体应用
-
图片支持旋转、放大等操作(非2in1设备)
注意:Office文档预览借助WPS能力实现,预览界面会有WPS提供的技术支持。
二、限制
| 限制项 | 说明 |
|---|---|
| 支持地区 | 仅中国境内(港澳台除外) |
| 支持设备(文件预览) | Phone、Tablet、2in1 |
| 支持设备(文件打开加速) | 仅2in1设备 |
| 模拟器预览 | 不支持.pdf/.pptx/.xlsx/.docx等文档类文件格式预览 |
| 模拟器加速功能 | 不支持文件打开加速和通用文件缓存加速 |
| 预览方式 | 仅支持跳出应用进行预览,暂不支持应用内预览 |
三、支持的文件类型
| 类型 | 文件后缀 | mimeType |
|---|---|---|
| 文本 | txt、cpp、c、h、java、xhtml、xml | text/plain等 |
| 网页 | html、htm | text/html |
| 图片 | jpg、png、gif、webp、bmp、svg | image/jpeg等 |
| 音频 | m4a、aac、mp3、ogg、wav | audio/mp4a-latm等 |
| 视频 | mp4、mkv、ts | video/mp4等 |
| application/pdf | ||
| Office文档 | doc、docx、xls、xlsx、ppt、pptx、csv、ofd | application/msword等 |
注意:实际支持情况可采用canPreview接口判断。
四、核心接口
| 接口 | 描述 |
|---|---|
openPreview(context, file, info) |
打开预览功能(单个文件) |
openPreview(context, files, index) |
打开预览功能(多个文件,仅移动端) |
canPreview(context, uri) |
判断文件是否可预览 |
hasDisplayed(context) |
判断预览窗口是否已经存在 |
closePreview(context) |
关闭预览窗口 |
loadData(context, file) |
加载预览文件信息(仅当预览窗口存在时生效) |
五、开发步骤
5.1 导入模块
import { filePreview } from '@kit.PreviewKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { common } from '@kit.AbilityKit';
5.2 判断是否可以预览
let uri = 'file://docs/storage/Users/currentUser/Documents/1.txt';
let uiContext = this.getUIContext().getHostContext() as common.Context;
filePreview.canPreview(uiContext, uri).then((result) => {
console.info(`Succeeded in obtaining the result of whether it can be previewed. result = ${result}`);
}).catch((err: BusinessError) => {
console.error(`Failed to obtain the result, err.code = ${err.code}, err.message = ${err.message}`);
});
5.3 打开文件预览(单文件)
Promise方式:
let uiContext = this.getUIContext().getHostContext() as common.Context;
let displayInfo: filePreview.DisplayInfo = {
x: 100,
y: 100,
width: 800,
height: 800
};
let fileInfo: filePreview.PreviewInfo = {
title: '1.txt',
uri: 'file://docs/storage/Users/currentUser/Documents/1.txt',
mimeType: 'text/plain'
};
filePreview.openPreview(uiContext, fileInfo, displayInfo).then(() => {
console.info('Succeeded in opening preview');
}).catch((err: BusinessError) => {
console.error(`Failed to open preview, err.code = ${err.code}, err.message = ${err.message}`);
});
Callback方式:
filePreview.openPreview(uiContext, fileInfo, displayInfo, (err) => {
if (err && err.code) {
console.error(`Failed to open preview, err.code = ${err.code}, err.message = ${err.message}`);
return;
}
console.info('Succeeded in opening preview');
});
5.4 打开文件预览(多文件,仅移动端)
let uiContext = this.getUIContext().getHostContext() as common.Context;
let fileInfo1: filePreview.PreviewInfo = {
title: '1.txt',
uri: 'file://docs/storage/Users/currentUser/Documents/1.txt',
mimeType: 'text/plain'
};
let fileInfo2: filePreview.PreviewInfo = {
title: '2.txt',
uri: 'file://docs/storage/Users/currentUser/Documents/2.txt',
mimeType: 'text/plain'
};
let files: Array<filePreview.PreviewInfo> = [fileInfo1, fileInfo2];
filePreview.openPreview(uiContext, files, 0).then(() => {
console.info('Succeeded in opening preview');
}).catch((err: BusinessError) => {
console.error(`Failed to open preview, err.code = ${err.code}, err.message = ${err.message}`);
});
5.5 加载新文件(预览窗口已存在时)
let uiContext = this.getUIContext().getHostContext() as common.Context;
let fileInfo: filePreview.PreviewInfo = {
title: '2.txt',
uri: 'file://docs/storage/Users/currentUser/Documents/2.txt',
mimeType: 'text/plain'
};
filePreview.loadData(uiContext, fileInfo).then(() => {
console.info('Succeeded in loading data.');
}).catch((err: BusinessError) => {
console.error(`Failed to load data, err.code = ${err.code}, err.message = ${err.message}`);
});
5.6 关闭预览窗口
let uiContext = this.getUIContext().getHostContext() as common.Context;
filePreview.closePreview(uiContext).then(() => {
console.info('Succeeded in closing preview');
}).catch((err: BusinessError) => {
console.error(`Failed to close preview, err.code = ${err.code}, err.message = ${err.message}`);
});
六、注意事项
| 注意点 | 说明 |
|---|---|
| 预览方式 | 仅支持跳出应用预览,不支持应用内预览 |
| Office预览 | 借助WPS能力,界面会显示WPS相关字样 |
| 重复调用 | openPreview在1秒内重复调用无效 |
| loadData限制 | 100毫秒内重复调用无效 |
| 多文件预览 | 仅移动端可用 |
| 权限 | 需要调用方存在对应uri的转授权能力 |
更多推荐

所有评论(0)