更新记录

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: 由于本插件包含原生代码,必须制作自定义基座后才能在手机上运行调试。标准基座无法运行原生插件。


如有任何疑问或遇到技术问题,欢迎在插件市场评论区留言。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

android.permission.READ_EXTERNAL_STORAGE android.permission.READ_MEDIA_IMAGES android.permission.READ_MEDIA_VIDEO

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

本插件不采集任何用户数据,也不将数据发送到任何服务器。插件仅提供本地读取设备相册和文件的能力,数据仅在用户App内部处理。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: