如何从任何已安装应用程序的软件包名称中获取versionCode?

时间:2019-08-19 05:23:07

标签: android

我正在为我的公司创建一个类似Play商店的应用。我已经从Web应用程序在服务器上上传了APK。我已经从android应用中的url下载了apk,并提示安装屏幕。现在我想要从API获取新版本代码和程序包名称。我想从软件包名称中获取已安装应用的版本代码。如何从我从API获得的程序包名称中获得版本代码?

4 个答案:

答案 0 :(得分:0)

使用此

public Long getVersionNo(String packageName){
    PackageInfo packageInfo  = null;
    try {
        packageInfo = getPackageManager().getPackageInfo(packageName, 0);
        return packageInfo.getLongVersionCode();
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
   return null;
}

将软件包名称传递给此函数,它将返回设备上安装的应用程序的版本号。如果找不到app,它将返回null。

答案 1 :(得分:0)

尝试一下

try {  
  PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);  
  String version = pInfo.versionName;  
  int verCode = pInfo.versionCode;  
} catch (PackageManager.NameNotFoundException e) {  
  e.printStackTrace();  
}  

答案 2 :(得分:0)

List<PackageInfo> packagesInstalledList = getPackageManager().getInstalledPackages(PackageManager.GET_META_DATA);
PackageInfo packageInfo = context.getPackageManager().getPackageInfo( "com.xyz", 0 );

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
    long versionCode = PackageInfoCompat.getLongVersionCode(packageInfo);
}else {
    long versionCode = packageInfo.versionCode;//PackageInfo Deprecated in API-28
}

String versionName = packageInfo.versionName;

答案 3 :(得分:0)

所有提供的答案都是正确的。但是,请注意,PackageInfo.versionCode已在API级别28中弃用。对于运行Android Pie或更高版本的设备,请使用getLongVersionCode,如下所示...

    var info: PackageInfo? = null
    var versionCode: Long? = null

    try {
        info = context?.packageManager?.getPackageInfo(context?.packageName, 0)
        versionCode =
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P)  info?.versionCode?.toLong()
        else info?.longVersionCode 
    }
    catch(e: PackageManager.NameNotFoundException){

    }