4***@qq.com
4***@qq.com
  • 发布:2016-08-02 17:24
  • 更新:2019-10-29 14:41
  • 阅读:3596

可以获取到手机已经安装的应用列表吗?

分类:MUI
2016-08-02 17:24 负责人:无 分享
已邀请:

最佳回复

赵梦欢

赵梦欢 - 专注前端,乐于分享!

自己可以使用nativejs去写,但是得会原生的方法,不过你也可以直接参考登陆模板中的代码:

这个例子 获取本地是否安装客户端qq/weixin/sinaweibo

owner.isInstalled = function(id) {  
        if (id === 'qihoo' && mui.os.plus) {  
            return true;  
        }  
        if (mui.os.android) {  
            var main = plus.android.runtimeMainActivity();  
            var packageManager = main.getPackageManager();  
            var PackageManager = plus.android.importClass(packageManager)  
            var packageName = {  
                "qq": "com.tencent.mobileqq",  
                "weixin": "com.tencent.mm",  
                "sinaweibo": "com.sina.weibo"  
            }  
            try {  
                return packageManager.getPackageInfo(packageName[id], PackageManager.GET_ACTIVITIES);  
            } catch (e) {}  
        } else {  
            switch (id) {  
                case "qq":  
                    var TencentOAuth = plus.ios.import("TencentOAuth");  
                    return TencentOAuth.iphoneQQInstalled();  
                case "weixin":  
                    var WXApi = plus.ios.import("WXApi");  
                    return WXApi.isWXAppInstalled()  
                case "sinaweibo":  
                    var SinaAPI = plus.ios.import("WeiboSDK");  
                    return SinaAPI.isWeiboAppInstalled()  
                default:  
                    break;  
            }  
        }  
    }

将这个例子进一步改了改,用nativejs实现android的方法如下:

mui.plusReady(function () {  
    var main = plus.android.runtimeMainActivity();  
    var packageManager = main.getPackageManager();  
    var PackageManager = plus.android.importClass(packageManager);  
    var packages = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);  

    var len = plus.android.invoke(packages,'size');  
    for(var i=0;i<len;i++){  
        // 安装包信息  
        var packageInfo = plus.android.invoke(packages,'get',i);  
        var applicationInfo = plus.android.getAttribute(packageInfo,"applicationInfo");  
        // 应用名称  
        var appName = plus.android.invoke(applicationInfo,"loadLabel",packageManager)  
        // 包名  
        var packageName = plus.android.getAttribute(packageInfo,"packageName");  
        // 版本号  
        var versionCode = plus.android.getAttribute(packageInfo,"versionCode");  
        // 图标  
        var appIcon = plus.android.invoke(applicationInfo,"loadIcon",packageManager);  

        console.log("appName:"+appName+";  "+"packageName:"+packageName+";  "+"versionCode:"+versionCode);  
    }  
})
  • 匿名用戶

    您好,问一下 图标的话,怎么样才可以在h5上直接使用?

    2019-04-08 18:18

  • 4***@qq.com

    回复 匿名用戶: 请问下,你后来显示了么?我也遇到这个需求

    2019-10-28 19:09

  • 匿名用戶

    回复 4***@qq.com: 我后面改成用原生写了,前端映射接收数组就行了。。

    2019-10-29 10:59

  • 4***@qq.com

    回复 匿名用戶: = =好吧好吧,感谢感谢。我在纠结下,不行我也用原生写了。谢谢你了。

    2019-10-29 11:10

  • 4***@qq.com

    回复 匿名用戶: 我这边可以了。可以看下面我的评论

    2019-10-29 14:40

4***@qq.com

4***@qq.com

mui.plusReady(function () {
plus.android.importClass('java.util.ArrayList');
plus.android.importClass('java.io.ByteArrayOutputStream');
plus.android.importClass('java.io.IOException');
plus.android.importClass('android.content.pm.PackageInfo');
plus.android.importClass('android.content.pm.PackageManager');
plus.android.importClass('android.graphics.Bitmap');
plus.android.importClass('android.graphics.BitmapFactory');
plus.android.importClass('android.util.Base64');
plus.android.importClass('android.graphics.drawable.BitmapDrawable');

            var ApplicationInfo = plus.android.importClass('android.content.pm.ApplicationInfo');    
            var MainActivity = plus.android.runtimeMainActivity();      
            var PackageManager = MainActivity.getPackageManager();      
            var pinfo = plus.android.invoke(PackageManager, 'getInstalledPackages', 0)      
            if (pinfo != null) {    
                var apklist = []    
                for (var i = 0; i < pinfo.size(); i++) {      
                    //PackageInfo{4b45699f9d  com.tencent.mobileqq}      
                    var pkginfo = pinfo.get(i);   
                    var issysapk = ((pkginfo.plusGetAttribute("applicationInfo").plusGetAttribute("flags") & ApplicationInfo.FLAG_SYSTEM) != 0) ? true : false    
                    if(issysapk == false){       
                        const apkinfo = {    
                            appName:pkginfo.plusGetAttribute("applicationInfo").loadLabel(PackageManager).toString(),  //应用名称    
                            appIco:pkginfo.plusGetAttribute("applicationInfo").loadIcon(PackageManager),  
                            packageName:pkginfo.plusGetAttribute("packageName"),  // 包名   
                            versionName:pkginfo.plusGetAttribute("versionName"),  //版本号  
                            versionCode:pkginfo.plusGetAttribute("versionCode")// 版本Code  
                        }   
                        var bimp=apkinfo.appIco.getBitmap();    
                        //console.log("当前bitmap:"+bimp);  
                        var BitmapFactory = plus.android.importClass("android.graphics.BitmapFactory");  
                        var Base64 = plus.android.importClass("android.util.Base64");  
                        var Bitmap = plus.android.importClass('android.graphics.Bitmap');    
                        var ByteArrayOutputStream = plus.android.importClass("java.io.ByteArrayOutputStream");  
                        try{  
                            var baos = new ByteArrayOutputStream();  
                            bimp.compress(Bitmap.CompressFormat.JPEG, 100, baos);    
                            baos.flush();    
                            baos.close();   
                            var bitmapBytes = baos.toByteArray();    
                            var result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT);  
                            document.getElementById("showImg").src="data:image/jpeg;base64,"+result; //这边就是图片  
                        }  
                        catch(e){  
                            console.log(e);  
                        }  
                        apklist.push(apkinfo);    
                    }    

                }    
                //this.appList = apklist    
                //打印出所有的APP名称,包名,版本    
                //console.log(JSON.stringify(apklist))    
            }  

该问题目前已经被锁定, 无法添加新回复