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

发布于 1周前 作者 yibo5220 来自 Uni-App

uni-app 判断手机已安装某APP的方法(Android,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')

1 回复

在uni-app中判断手机是否已经安装了某个APP,可以通过调用原生插件或者原生代码的方式来实现。由于uni-app本身是基于Vue.js开发多端应用的框架,对于原生功能的调用,通常需要借助5+ App(HBuilderX打包的原生App)的相关API。

以下是一个使用Native.js在Android平台上判断某APP是否已安装的方法。Native.js允许我们在uni-app中直接编写原生JavaScript代码,从而调用Android的原生API。

首先,确保你的项目是基于5+ App打包的,然后在你的uni-app项目中,可以使用以下代码进行判断:

// 引入Native.js模块
var native = require('native.js');

// 定义要判断的APP的包名
var packageName = 'com.example.targetapp'; // 替换为目标APP的包名

// 使用Native.js调用Android的PackageManager来判断APP是否安装
function isAppInstalled(callback) {
    var main = plus.android.runtimeMainActivity();
    var pm = main.getPackageManager();
    try {
        var info = pm.getPackageInfo(packageName, 0);
        callback(true); // 已安装
    } catch (e) {
        callback(false); // 未安装
    }
}

// 调用判断函数
isAppInstalled(function(installed) {
    if (installed) {
        console.log('APP已安装');
        // 可以在这里添加打开APP的代码,例如:
        // plus.runtime.launchApplication({
        //     action: 'android.intent.action.MAIN',
        //     packageName: packageName,
        //     className: packageName + '.MainActivity', // 替换为目标APP的主Activity
        // }, function(e) {
        //     console.log('打开APP失败:' + JSON.stringify(e));
        // });
    } else {
        console.log('APP未安装');
        // 可以在这里提示用户去安装APP
    }
});

注意:

  1. 上述代码中的packageName需要替换为你想要判断的目标APP的实际包名。
  2. 使用plus.runtime.launchApplication可以打开已安装的APP,但className也需要根据目标APP的实际主Activity进行替换。
  3. 由于Native.js直接操作原生API,因此这段代码只能在5+ App中运行,无法在H5、小程序等其他端运行。

这种方法利用了Android的PackageManager类来获取APP的安装信息,通过捕获异常来判断APP是否存在。这是一个比较直接且有效的方法来判断Android设备上是否安装了某个APP。

回到顶部