lunnlew
lunnlew
  • 发布:2016-01-06 08:50
  • 更新:2019-08-02 22:34
  • 阅读:6214

判断手机已安装某APP的方法(Android,Native.js)

分类:Native.js

原生实现

private boolean isInstalledApp(Context context, String packageName){   
          //获取packagemanager   
          final PackageManager packageManager = context.getPackageManager();  
          //获取所有已安装程序的包信息   
          List< packageInfo> pinfo = packageManager.getInstalledPackages(0);  
          //用于存储所有已安装程序的包名   
          List<String> pName = new ArrayList<String>();  
         //从pinfo中将包名字逐一取出,压入pName list中   
         if(pinfo != null){   
              for(int i = 0; i < pinfo.size(); i++){   
                  String pn = pinfo.get(i).packageName;   
                  pName.add(pn);   
              }   
          }   
          //判断pName中是否有目标程序的包名,有TRUE,没有FALSE   
          return pName.contains(packageName);  
    } 

Native.js

var isInstalledApp = function(pkgname) {  
        plus.android.importClass('java.util.ArrayList');  
        plus.android.importClass('android.content.pm.PackageInfo');  
        plus.android.importClass('android.content.pm.PackageManager');  
        var MainActivity = plus.android.runtimeMainActivity();  
        var PackageManager = MainActivity.getPackageManager();  
        var pinfo = plus.android.invoke(PackageManager, 'getInstalledPackages', 0)  
        if (pinfo != null) {  
            for (i = 0; i < pinfo.size(); i++) {  
                //PackageInfo{4b45699f9d  com.tencent.mobileqq}  
                if (pinfo.get(i).toString().indexOf(pkgname) !== -1) {  
                    return true;  
                }  
            }  
        }  
        return false;  
    }  

## 使用  isInstalledApp('com.tencent.mm')

注意个别手机如华为有权限问题,如果不给权限,无法获取本机应用列表。

方式二:

var getIntentByPackageName = function(pkgname) {  
    plus.android.importClass('android.content.pm.PackageManager');  
    var MainActivity = plus.android.runtimeMainActivity();  
    var PackageManager = MainActivity.getPackageManager();  
    return plus.android.invoke(PackageManager, 'getLaunchIntentForPackage', pkgname);  
}  
var isInstalledApp = function(pkgname) {  
    return getIntentByPackageName(pkgname) != null;  
}  
## 使用  isInstalledApp('com.tencent.mm')
4 关注 分享
jwenlee ngkeny 7***@qq.com machi的奶茶

要回复文章请先登录注册

bishuihanshan

bishuihanshan

ios怎么查呢
2019-08-02 22:34
x***@126.com

x***@126.com

回复 ZIFeng_ :
请问最后怎么改的
2017-08-07 10:10
7***@qq.com

7***@qq.com

回复 ngkeny :
是不是判断哪个应用就把包名赋值给pkgname呢 谢谢
2017-03-24 10:39
Element

Element

2333
2017-01-11 19:06
ZIFeng_

ZIFeng_

安卓手机把检测的app卸载后,检测的时候还是存在,要怎么改?
2016-11-01 16:33
ngkeny

ngkeny

回复 ngkeny :
哦,是我少导入了,java.util.ArrayList 表,sorry.
测试过,成功 。
2016-08-03 20:25
ngkeny

ngkeny

按你的方法:pinfo.size() 会报错,怎么回事?
2016-08-03 20:23