更新记录
1.0.0(2026-01-24)
平台兼容性
uni-app(3.6.15)
| Vue2 | Vue2插件版本 | Vue3 | Vue3插件版本 | Chrome | Safari | app-vue | app-vue插件版本 | app-nvue | app-nvue插件版本 | Android | Android插件版本 | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.0 | √ | 1.0.0 | × | × | √ | 1.0.0 | √ | 1.0.0 | 5.0 | 1.0.0 | × | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | - | × | × |
uni-app x(3.6.15)
| Chrome | Safari | Android | Android插件版本 | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|
| × | × | 5.0 | 1.0.0 | × | × | × |
Vnxn Media Gallery 原生媒体库插件
vnxn-media-gallery 是一款基于 UTS 开发的 UniApp 原生插件(支持 Android)。它允许开发者高性能地访问设备系统相册、分页加载图片和视频、生成缩略图以及处理文件缓存。
📱 示例 App 下载 & 购买须知 (推荐)
为了确保插件功能满足您的具体需求,且兼容您的目标设备,强烈建议您在购买前下载示例 App 进行真机测试。
⬇️ 示例 App 下载地址: https://www.123865.com/s/SG4DVv-hweud
⚠️ 温馨提示: 请务必在真机上测试各项功能(如读取相册、生成缩略图等)确认无误后再下单。
✨ 核心特性
- 高性能: 直接调用 Android 原生 MediaStore API,毫秒级加载。
- Android 13+ 适配: 完美支持 Android 10/11/12/13+ 的分区存储机制。
- 功能丰富: 支持相册获取、媒体分页筛选、视频/图片缩略图生成、沙盒文件缓存。
- 类型安全: 提供 TypeScript 定义,开发体验更佳。
平台支持
| 平台 | Android | iOS | uni-app x Android |
|---|---|---|---|
| 支持情况 | ✅ | ❌ | ✅ |
⚙️ 权限配置 (重要)
在使用插件前,请务必在 manifest.json -> App模块权限配置 -> Android打包权限配置 中勾选以下权限:
基础权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>(Android 12 及以下)
Android 13+ 专用权限 (TargetSDK >= 33):
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/><uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
⚠️ 注意: 插件内部会自动判断系统版本请求对应权限,但你必须在
manifest.json中声明它们,否则会导致获取相册为空。
🚀 快速开始
import {
getAlbums,
getMedia,
makeThumbnail,
clearCache,
cacheFile
} from "@/uni_modules/vnxn-media-gallery";
📚 API 文档
1. getAlbums(options)
获取设备中的相册(文件夹)列表。
参数说明 (Options):
| 属性 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| filter | String | 否 | "all" | 筛选类型:"all" (全部), "video" (仅视频), "images" (仅图片) |
⚠️ 注意是 images 复数 |
| success | Function | 否 | - | 成功回调,返回 AlbumItem[] |
| fail | Function | 否 | - | 失败回调 |
返回数据 (AlbumItem):
| 字段 | 类型 | 说明 |
|---|---|---|
bucketId |
String | 相册ID,用于 getMedia 筛选 ("ALL" 代表所有) |
bucketName |
String | 相册名称 (e.g., "Camera", "Screenshots") |
count |
Number | 该相册内的媒体文件数量 |
coverPath |
String | 封面图原图路径 |
coverThumbPath |
String | 封面图缩略图路径 (若生成失败可能为空) |
示例代码:
getAlbums({
filter: "video",
success: (res) => {
// res.data: AlbumItem[]
console.log("发现相册数量:", res.data.length);
res.data.forEach(album => {
console.log(`相册: ${album.bucketName}, ID: ${album.bucketId}, 数量: ${album.count}`);
});
}
});
2. getMedia(options)
分页获取媒体文件列表(支持按相册筛选)。
参数说明 (Options):
| 属性 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| page | Number | 否 | 1 | 当前页码 |
| pageSize | Number | 否 | 20 | 每页数量 |
| filter | String | 否 | "all" | 筛选类型:"all", "video", "images" (注意复数) |
| bucketId | String | 否 | "" | 相册ID,为空则查询所有 |
| forceGenerate | Boolean | 否 | false | 是否强制刷新缩略图(设为 true 会增加加载耗时) |
| success | Function | 否 | - | 成功回调,返回 MediaItem[] |
| fail | Function | 否 | - | 失败回调 |
返回数据 (MediaItem):
| 字段 | 类型 | 说明 |
|---|---|---|
id |
Number/String | 媒体文件系统 ID (后续操作推荐使用) |
path |
String | 媒体文件路径 (Android 10+ 可能是 content:// URI) |
type |
String | 类型:"image" 或 "video" |
thumbPath |
String | 缩略图路径 (若存在缓存则返回,否则可能为空) |
mimeType |
String | 具体格式 (e.g., "image/jpeg", "video/mp4") |
duration |
String | 格式化后的时长 (例如 "01:30") |
durationMs |
Number | 原始时长 (毫秒) |
size |
Number | 文件大小 (字节) |
width |
Number | 宽 |
height |
Number | 高 |
示例代码:
getMedia({
page: 1,
pageSize: 20,
bucketId: "540528482",
filter: "images", // 注意这里是 images
success: (res) => {
console.log("图片列表:", res.data);
}
});
3. makeThumbnail(options)
生成或获取媒体文件的缩略图。
参数说明 (Options):
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | String | 是 | 文件路径 (必填,作为 ID 查找失败时的兜底及类型判断依据) |
| id | String | 否 | 媒体文件的系统 ID (强烈推荐传入,生成速度更快) |
| type | String | 否 | 媒体类型:"video" 或 "image",默认为 "image" |
| success | Function | 否 | 成功回调,返回缩略图路径字符串 |
| fail | Function | 否 | 失败回调 |
示例代码:
makeThumbnail({
id: "10245",
path: "content://media/external/...", // path 必填
type: "video",
success: (res) => {
// res.data 直接就是路径字符串
console.log("缩略图路径:", res.data);
}
});
4. cacheFile(options)
将外部文件(如 content://)复制到 App 临时沙盒目录,转为 file:// 路径。
参数说明 (Options):
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | String | 是 | 原始文件路径 |
| success | Function | 否 | 成功回调,返回 新的文件路径字符串 |
| fail | Function | 否 | 失败回调 |
示例代码:
cacheFile({
path: "content://media/external/images/media/1024",
success: (res) => {
// 注意:res.data 直接就是路径字符串,不是对象
const sandboxPath = res.data;
console.log("沙盒路径:", sandboxPath);
uni.uploadFile({
url: '...',
filePath: sandboxPath,
name: 'file'
});
}
});
5. clearCache(options)
清理插件生成的临时缓存文件(缩略图、预览图)。
参数说明:
| 属性 | 类型 | 说明 |
|---|---|---|
| success | Function | 成功回调,返回 已删除文件的数量 (Number) |
| fail | Function | 失败回调 |
示例代码:
clearCache({
success: (res) => console.log("清理了 " + res.data + " 个缓存文件")
});
常见问题 (FAQ)
Q: 为什么 getAlbums 返回空数组?
A: 请检查是否已获取 READ_EXTERNAL_STORAGE (Android < 13) 或 READ_MEDIA_IMAGES (Android 13+) 权限。部分手机系统需要在系统设置中手动“允许管理所有文件”或“允许访问媒体”。
Q: 缩略图路径是永久有效的吗?
A: 不是。makeThumbnail 生成的是临时文件,建议每次使用时检查或重新生成。调用 clearCache 会删除这些文件。
Q: 自定义基座调试报错? A: 由于本插件包含原生代码,必须制作自定义基座后才能在手机上运行调试。标准基座无法运行原生插件。
如有任何疑问或遇到技术问题,欢迎在插件市场评论区留言。

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 3
赞赏 0
下载 13708633
赞赏 1851
赞赏
京公网安备:11010802035340号