更新记录

1.0.0(2023-04-27)

首次发布


平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 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原生插件配置”->”云端插件“列表中删除该插件重新选择


获取手机应用列表简介

  • 支撑获取用户安装的应用与全部应用
  • 支持获取应用信息(应用图标,应用大小,应用名称,应用包名,应用版本,应用apk路径,应用安装时间,应用最后更新时间)
  • 由于应用过多,需要加载应用图片,因此加载速度可能有点慢等待几秒都是有可能的

权限说明

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

使用说明

1.获取插件

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

2.获取用户安装的应用列表

getapplist.userapp()

3.获取全部应用列表

getapplist.allapp()

代码示例

<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>
                </view>
            </view>
        </view>
    </view>
</template>
<script>
    const getapplist = uni.requireNativePlugin('Fengci-AppList')
    export default {
        data() {
            return {
                list: []
            }
        },
        methods: {
            async user(){
                uni.showLoading({
                    title: '加载中'
                });
                this.list =await getapplist.userapp()
                uni.hideLoading()
            },
            async all(){
                uni.showLoading({
                    title: '加载中'
                });
                this.list =await getapplist.allapp()
                uni.hideLoading()
            },
            search(val){
                if(this.list.length==0){
                    uni.showToast({
                        icon:'error',
                        title: '应用列表为空',
                        duration: 2000
                    });
                    return null
                }
                var temp=[]
                for(var i in this.list){
                    if(this.list[i].name.indexOf(val.detail.value)>=0||this.list[i].package.indexOf(val.detail.value)>=0){ 
                        temp.push(this.list[i])
                    }
                }
                this.list=temp
            },
            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 + "分";
            },
            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;
            },
            copy(url) {
                uni.setClipboardData({
                    data: url
                });
            },
            up(path,name) {
                // 上传应用到服务器需要该应用获取所有文件访问权限,否则无法上传
                uniCloud.uploadFile({
                    filePath: path,
                    cloudPath: name+'.apk',
                    success(res) {
                        uni.showToast({
                            title: '上传成功',
                            duration: 2000
                        });
                    },
                    fail(res) {
                        console.log(res);
                    }
                });
            },
            onload(){
                this.user()
            }
        }
    }
</script>

<style lang="less">
</style>

返回参数

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

隐私、权限声明

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. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

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