更新记录

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:

  1. 确保在 Android 真机上运行
  2. 检查是否有 QUERY_ALL_PACKAGES 权限
  3. 确保目标 API 级别配置正确

Q: 分享失败怎么处理?

A:

  1. 检查目标应用是否已安装
  2. 确认 targetPackagetargetActivity 参数正确
  3. 验证分享文件路径是否存在
  4. 查看 fail 回调中的错误信息

Q: 如何获取应用的 Activity 信息?

A: 可以通过 getInstalledApps 方法获取的 InstalledApp 对象中的 activityNameactivityLabel 字段。

隐私、权限声明

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

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />

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

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

许可协议

MIT协议