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

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

分类: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);  
	}  
})
  • 1***@qq.com

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


    2019-04-08 18:18

  • 4***@qq.com

    回复 1***@qq.com: 请问下,你后来显示了么?我也遇到这个需求


    2019-10-28 19:09

  • 1***@qq.com

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


    2019-10-29 10:59

  • 4***@qq.com

    回复 1***@qq.com: = =好吧好吧,感谢感谢。我在纠结下,不行我也用原生写了。谢谢你了。


    2019-10-29 11:10

  • 4***@qq.com

    回复 1***@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))    
			}  

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