需要添加 implementation 'org.jsoup:jsoup:1.12.1'
package com.unity3d.player;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.AsyncTask;
import androidx.appcompat.app.AlertDialog;
import org.jsoup.Jsoup;
public class VersionChecker extends AsyncTask<String, String, String> {
private static Activity _context;
@Override
protected String doInBackground(String... strings) {
String newVersion = null;
try {
newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + _context.getPackageName() + "&hl=it")
.timeout(30000)
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.referrer("http://www.google.com")
.get()
.select("div.hAyfc:nth-child(4) > span:nth-child(2) > div:nth-child(1) > span:nth-child(1)")
.first()
.ownText();
return newVersion;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String onlineVersion) {
super.onPostExecute(onlineVersion);
if (onlineVersion != null && !onlineVersion.isEmpty()) {
try {
if (VersionChecker.compareVersion(onlineVersion, VersionChecker.getVersionName((Activity) _context)) > 0) {
String url = "https://play.google.com/store/apps/details?id=" + _context.getPackageName();
AlertDialog.Builder builder = new AlertDialog.Builder(_context);
builder.setTitle("New Version");
builder.setMessage("There is a new version, Do you want to update?");
builder.setPositiveButton("Update", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
_context.startActivity(intent);
}
});
builder.setNegativeButton("Not Now", null);
builder.show();
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}
/**
* 版本号比较
* 0代表相等,1代表version1大于version2,-1代表version1小于version2
*
* @param version1
* @param version2
* @return
*/
static int compareVersion(String version1, String version2) {
if (version1.equals(version2)) {
return 0;
}
String[] version1Array = version1.split("\\.");
String[] version2Array = version2.split("\\.");
int index = 0;
// 获取最小长度值
int minLen = Math.min(version1Array.length, version2Array.length);
int diff = 0;
// 循环判断每位的大小
while (index < minLen
&& (diff = Integer.parseInt(version1Array[index])
- Integer.parseInt(version2Array[index])) == 0) {
index++;
}
if (diff == 0) {
// 如果位数不一致,比较多余位数
for (int i = index; i < version1Array.length; i++) {
if (Integer.parseInt(version1Array[i]) > 0) {
return 1;
}
}
for (int i = index; i < version2Array.length; i++) {
if (Integer.parseInt(version2Array[i]) > 0) {
return -1;
}
}
return 0;
} else {
return diff > 0 ? 1 : -1;
}
}
/**
* 获取版本号
*/
static String getVersionName(Activity context) throws PackageManager.NameNotFoundException {
// 获取packagemanager的实例
PackageManager packageManager = context.getPackageManager();
// getPackageName()是你当前类的包名,0代表是获取版本信息
PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
String version = packInfo.versionName;
return version;
}
/**
* 版本
* @param ctx
*/
public static void VersionCheck(Activity ctx)
{
_context = ctx;
VersionChecker checker = new VersionChecker();
checker.execute();
}
}
使用:
在主Activity中使用
VersionChecker.VersionCheck(this);