
- 发布:2016-08-02 17:24
- 更新:2019-10-29 14:41
- 阅读:3761
可以获取到手机已经安装的应用列表吗?
最佳回复

赵梦欢 - 专注前端,乐于分享!
自己可以使用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);
}
})

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))
}
wweili
您好,问一下 图标的话,怎么样才可以在h5上直接使用?
2019-04-08 18:18
4***@qq.com
回复 wweili: 请问下,你后来显示了么?我也遇到这个需求
2019-10-28 19:09
wweili
回复 4***@qq.com: 我后面改成用原生写了,前端映射接收数组就行了。。
2019-10-29 10:59
4***@qq.com
回复 wweili: = =好吧好吧,感谢感谢。我在纠结下,不行我也用原生写了。谢谢你了。
2019-10-29 11:10
4***@qq.com
回复 wweili: 我这边可以了。可以看下面我的评论
2019-10-29 14:40