更新记录
1.0.5(2025-09-08) 下载此版本
文档调整
1.0.4(2025-09-08) 下载此版本
【重要】插件内部不再单独处理 APP 的分享兼容问题。 1、新增 IOS/Android 通用分享方法 shareContent,设置好分享参数后调用系统分享 2、Android 新增获取应用列表:getInstalledApps、分享到指定应用:shareTargetApp
1.0.3(2025-06-02) 下载此版本
- 文档使用说明调整。
平台兼容性
uni-app(4.56)
Vue2 | Vue2插件版本 | Vue3 | Vue2插件版本 | Chrome | Safari | app-vue | app-nvue | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
√ | 1.0.4 | √ | 1.0.4 | - | - | - | - | 5.0 | 1.0.4 | 12 | 1.0.4 | - |
微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
---|---|---|---|---|---|---|---|---|---|---|
- | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.56)
Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
---|---|---|---|---|---|---|---|
- | - | 5.0 | 1.0.4 | 12 | 1.0.4 | - | - |
es-share 插件文档
概述
es-share
是一个用于 uni-app uts 的分享插件,专门针对 Android / IOS 平台的分享。
安卓提供获取手机应用列表和分享内容到指定应用的功能
功能特性
- 📱 获取 Android 设备已安装应用列表
- 🔄 支持多种分享类型(文本、图片、文件)
- 🎯 支持指定目标应用分享
- 📊 提供详细的分享结果回调
安装
插件市场导入 es-share 插件
API 参考
方法
shareContent(params)
安卓、IOS通用分享方法,调用系统分享面板
参数:
params: ShareParameters
- 分享参数对象
示例:
import { shareContent } from '@/uni_modules/es-share'
shareContent({
type: 'image',
title: '分享标题',
content: '分享内容描述',
imageUrl: '/static/logo.ico',
openLog: true,
success() {
console.log('分享成功')
},
fail(error) {
console.log('分享失败', error)
}
})
getInstalledApps(callback)
获取设备已安装的应用列表(仅限 Android)
参数:
callback: (apps: InstalledApp[]) => void
- 获取成功后的回调函数
示例:
import { getInstalledApps } from '@/uni_modules/es-share'
getInstalledApps((apps) => {
console.log('已安装应用:', apps)
})
shareTargetApp(params)
分享到指定应用(仅限 Android)
参数:
params: ShareParameters
- 分享参数对象(需包含 targetPackage 和 targetActivity)
示例:
import { shareTargetApp } from '@/uni_modules/es-share'
shareTargetApp({
type: 'file',
title: '分享文件',
content: '文件描述',
fileUrl: '/static/document.pdf',
targetPackage: 'com.example.app',
targetActivity: 'com.example.app.ShareActivity',
openLog: true,
success() {
console.log('分享成功')
}
})
类型定义
InstalledApp
已安装应用信息类型
export type InstalledApp = {
packageName: string // 应用包名
appName: string // 应用名称
icon: any // 应用图标对象
iconBase64: string // 应用图标的 Base64 编码
activityName: string // Activity 类名
activityLabel: string // Activity 具体标签
}
ShareType
分享类型枚举
export type ShareType = 'text' | 'image' | 'file'
text
- 纯文本分享image
- 图片分享file
- 文件分享
ShareParameters
分享参数配置类型
export type ShareParameters = {
type: ShareType // 分享类型
title?: string // 分享标题(可选)
content?: string // 分享内容描述(可选)
imageUrl?: string // 图片路径(可选)
fileUrl?: string // 文件路径(可选)
openLog: boolean // 是否开启日志
targetPackage?: string // 目标应用包名(可选)
targetActivity?: string // 目标应用Activity(可选)
success?: (() => void) // 成功回调(可选)
fail?: ((msg: any) => void) // 失败回调(可选)
complete?: (() => void) // 完成回调(可选)
}
完整使用示例
Vue 3 Composition API
<template>
<view class="share-demo">
<!-- 获取应用列表按钮 -->
<button @click="getPhoneApps" class="btn">
获取手机应用列表(仅限Android)
</button>
<!-- 应用列表展示 -->
<view class="app-list" v-if="apps.length">
<view
class="app-item"
v-for="(app, index) in apps"
:key="index"
@click="handleShareTargetApp(app)"
>
<image
:src="`data:image/png;base64,${app.iconBase64}`"
class="app-icon"
/>
<text class="app-name">
{{ app.activityLabel || app.appName }}
</text>
</view>
</view>
<!-- 通用分享按钮 -->
<button @click="handleShareContent" class="btn">
分享内容
</button>
</view>
</template>
<script setup>
import { getInstalledApps, shareContent, shareTargetApp } from '@/uni_modules/es-share'
import { ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
const apps = ref([])
// 获取手机应用列表
const getPhoneApps = async () => {
if (apps.value.length) return
getInstalledApps((data) => {
console.log('获取到的应用:', data)
apps.value = data
})
}
// 分享到指定应用
const handleShareTargetApp = (app) => {
const params = {
type: 'file',
title: '分享文档',
content: '这是一个重要文档',
fileUrl: '/static/document.pdf',
openLog: true,
targetPackage: app.packageName,
targetActivity: app.activityName,
success() {
uni.showToast({ title: '分享成功', icon: 'success' })
},
fail(error) {
uni.showToast({ title: '分享失败', icon: 'error' })
console.error('分享失败:', error)
},
complete(res) {
console.log('分享操作完成:', res)
}
}
shareTargetApp(params)
}
// 通用分享
const handleShareContent = () => {
shareContent({
type: 'image',
title: '精彩内容分享',
content: '快来看看这个有趣的内容!',
imageUrl: '/static/share-image.jpg',
openLog: true,
success() {
uni.showToast({ title: '分享成功', icon: 'success' })
},
fail(error) {
uni.showToast({ title: '分享失败', icon: 'error' })
console.error('分享失败:', error)
}
})
}
// 页面加载时可以预加载应用列表
onLoad(() => {
// 可选:页面加载时就获取应用列表
// getPhoneApps()
})
</script>
<style lang="scss" scoped>
.share-demo {
padding: 20rpx;
}
.btn {
width: 100%;
margin: 20rpx 0;
padding: 24rpx;
background: #007aff;
color: white;
border-radius: 12rpx;
border: none;
font-size: 32rpx;
}
.app-list {
display: grid;
gap: 40rpx 20rpx;
grid-template-columns: repeat(3, 1fr);
margin: 40rpx 0;
.app-item {
display: flex;
align-items: center;
flex-direction: column;
justify-content: center;
padding: 20rpx;
border-radius: 12rpx;
background: #f8f9fa;
&:active {
background: #e9ecef;
}
}
.app-icon {
width: 80rpx;
height: 80rpx;
border-radius: 12rpx;
margin-bottom: 12rpx;
}
.app-name {
font-size: 24rpx;
color: #333;
text-align: center;
line-height: 1.2;
}
}
</style>
注意事项
权限要求
确保应用具有以下权限:
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
文件路径
- 图片和文件路径支持相对路径(如
/static/image.jpg
) - 建议将分享文件放在
static
目录下 - 确保文件存在且格式正确
调试建议
- 设置
openLog: true
开启详细日志 - 在真机上测试,模拟器可能无法正常获取应用列表
- 检查目标应用是否支持接收对应类型的分享内容
常见问题
Q: 获取不到应用列表怎么办?
A:
- 确保在 Android 真机上运行
- 检查是否有
QUERY_ALL_PACKAGES
权限 - 确保目标 API 级别配置正确
Q: 分享失败怎么处理?
A:
- 检查目标应用是否已安装
- 确认
targetPackage
和targetActivity
参数正确 - 验证分享文件路径是否存在
- 查看 fail 回调中的错误信息
Q: 如何获取应用的 Activity 信息?
A: 可以通过 getInstalledApps
方法获取的 InstalledApp
对象中的 activityName
和 activityLabel
字段。