更新记录

1.0.1(2025-07-08)

1.新增app搜索接口,可以无需等待加载全部的app直接搜索需要找的app 2.app信息新增应用类型其中0是本地应用,1是系统应用 3.优化vue3组合式代码

1.0.0(2023-04-27)

首次发布


平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.1 - 11.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


获取手机应用列表插件文档

功能简介

  • 支持获取用户安装的应用与全部应用
  • 支持获取应用详细信息:
    • 应用图标(base64格式)
    • 应用大小
    • 应用名称
    • 应用包名
    • 应用版本
    • 应用apk路径
    • 应用安装时间
    • 应用最后更新时间
    • 应用类型

注意事项

  • 由于需要加载应用图片,加载速度可能较慢(可能需要等待几秒甚至十几秒)

权限说明

  1. 需要获取读取应用列表权限
  2. 如需根据路径将安装包上传到云服务器,需要获取所有文件访问权限,否则无法上传

使用说明

1. 获取插件

const getapplist = uni.requireNativePlugin('Fengci-AppList')

2. 获取应用列表

// 获取用户安装的应用列表
getapplist.userapp()

// 获取全部应用列表
getapplist.allapp()

// 搜索应用,关键字可以是应用名称和包名
getapplist.search(key)

代码示例

<template>
    <view>
        <input type="text" placeholder="请输入应用名称或者包名" style="height: 50px;" @blur="search">
        <button @click="user">获取用户应用</button>
        <button @click="all">获取全部应用</button>
        <p>由于应用过多,需要加载应用图片,因此加载速度可能有点慢等待几秒都是有可能的</p>
        <view>
            <view v-for="item in list" @click="up(item.path,item.name)"
                style="padding: 5px;display: flex;align-items: center;">
                <image :src="item.icon" style="width: 50px;height: 50px;border-radius: 10px;"></image>
                <view style="margin-left: 5px;font-size: 12px;">
                    <p style="font-size: 16px;">{{item.name}} V{{item.version}}</p>
                    <p>{{item.package}} | {{gsbytes(item.size)}}</p>
                    <p>安装时间:{{gstime(item.firstDate)}}</p>
                    <p>更新时间:{{gstime(item.lastDate)}}</p>
                    <p>类型:{{item.flags==0?'本地应用':'系统应用'}}</p>
                </view>
            </view>
        </view>
    </view>
</template>
<script setup>
    import {
        ref
    } from 'vue'
    import {
        onUnload
    } from "@dcloudio/uni-app";
    const getapplist = uni.requireNativePlugin('Fengci-AppList')
    const list = ref([])
    // 获取用户的应用
    const user = async () => {
        uni.showLoading({
            title:"应用列表加载中"
        })
        list.value = await getapplist.userapp()
        uni.hideLoading()
    }
    // 获取全部的应用
    const all = async () => {
        uni.showLoading({
            title:"应用列表加载中"
        })
        list.value = await getapplist.allapp()
        uni.hideLoading()
    }
    //搜索应用,关键词可以是app名称或者包名,返回所有的app类型
    const search = async (val) => {
        list.value = []
        list.value = await getapplist.search(val.detail.value)
        if (list.value.length == 0) {
            uni.showToast({
                icon: 'error',
                title: '应用列表为空',
                duration: 2000
            });
        }
    }
    const up = (path, name) => {
        // 上传应用到服务器需要该应用获取所有文件访问权限,否则无法上传
        uniCloud.uploadFile({
            filePath: path,
            cloudPath: name + '.apk',
            success(res) {
                uni.showToast({
                    title: '上传成功',
                    duration: 2000
                });
            },
            fail(res) {
                console.log(res);
            }
        });
    }
    const gstime = (time) => {
        time = new Date(time)
        var month = time.getMonth() + 1;
        var day = time.getDate();
        var min = time.getMinutes()
        var hour = time.getHours()
        return month + "月" + day + "日" + hour + "时" + min + "分";
    }
    const gsbytes = (limit) => {
        var size;
        if (limit < 1024) {
            size = limit + "B"
        } else if (1024 <= limit && limit < 1024 * 1024) {
            size = (limit / 1024).toFixed(2) + "KB"
        } else if (1024 * 1024 <= limit && limit < 1024 * 1024 * 1024) {
            size = (limit / (1024 * 1024)).toFixed(2) + "MB"
        } else if (1024 * 1024 * 1024 <= limit) {
            size = (limit / (1024 * 1024 * 1024)).toFixed(2) + "GB"
        }
        return size;
    }
    const copy = (url) => {
        uni.setClipboardData({
            data: url
        });
    }
</script>

返回参数

参数名 类型 备注
icon String 应用图标(base64格式)
name String 应用名称
version String 应用版本
package String 应用包名
firstDate long 安装时间(返回时间戳)
lastDate long 更新时间(返回时间戳)
size long 应用大小
path String 安装包路径(file://格式)
flags int 应用类型(0是用户应用,1是系统应用)

隐私、权限声明

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

android.permission.READ_EXTERNAL_STORAGE, android.permission.WRITE_EXTERNAL_STORAGE, android.permission.MANAGE_EXTERNAL_STORAGE, android.permission.READ_CONTACTS, android.permission.SEND_SMS

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

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

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问