admin 管理员组文章数量: 887021
Android APP通过浏览器下载最新版本
首先判断app本地的版本和服务器上的版本是否是一样的。如果有新版本,那么就进行更新。
需要服务器端提供两个接口
- 获取服务器端apk版本号
- apk地址
1.获取当前app的版本号
/**
* 获取版本号
*
* @throws PackageManager.NameNotFoundException
*/
public static String getVersionName(Context context) throws PackageManager.NameNotFoundException {
// 获取packagemanager的实例
PackageManager packageManager = context.getPackageManager();
// getPackageName()是你当前类的包名,0代表是获取版本信息
PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
String version = packInfo.versionName;
return version;
}
2.根据版本号名称判断版本高低
0代表相等,1代表version1大于version2,-1代表version1小于version2
/**
* 版本号比较
*0代表相等,1代表version1大于version2,-1代表version1小于version2
* @param version1
* @param version2
* @return
*/
public 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;
}
}
3.从服务器获取最新版本号
http工具类(HttpURLTools)可参照Http工具类
Handler handlerapkVersion = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
String strRet = data.getString("value");
if (strRet == null) {
UIHelper.showToast(LoginActivity.this, "服务器异常!");
} else {
try {
JSONObject json = new JSONObject(strRet);
String apkVersion = json.getString("versionnumber");
String apkVersion1 = UIHelper
.getVersionName(LoginActivity.this);//获取当前app的版本号
int result = UIHelperpareVersion(apkVersion1,
apkVersion);
if (result == -1) { // 不是最新版本
showNoticeDialog();
}
} catch (JSONException | NameNotFoundException e) {
e.printStackTrace();
}
}
}
};
Runnable apkVersionTask = new Runnable() {
@Override
public void run() {
String strRet = null;
try {
strRet = HttpURLTools.sendHttpGet(GenBDB.strBaseURL
+ "apk/apkVersion");//从服务器获取最新版本号(接口)
} catch (Exception e) {
e.printStackTrace();
}
Message msg = new Message();
Bundle data = new Bundle();
data.putString("value", strRet);
msg.setData(data);
handlerapkVersion.sendMessage(msg);
}
};
4.弹出dialog提示更新
样式可以根据自己的需求设计,可参照Android Dialog超简单自定义布局
private void showNoticeDialog() {
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(
LoginActivity.this);// Builder,可以通过此builder设置改变AleartDialog的默认的主题样式及属性相关信息
builder.setTitle("软件版本更新");
String updateMsg = "有最新的软件包,请下载!";
builder.setMessage(updateMsg);
builder.setPositiveButton("下载", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
openBrowserUpdate(GenBDB.strBaseURL
+ "gfjhgl.apk");
}
});
builder.setNegativeButton("以后再说", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
Dialog noticeDialog = builder.create();
noticeDialog.show();
}
5.调用浏览器下载
/**
* 打开浏览器更新下载新版本apk
* @param apkUrl apk地址
*/
private void openBrowserUpdate(String apkUrl) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri apk_url = Uri.parse(apkUrl);
intent.setData(apk_url);
startActivity(intent);//打开浏览器
}
部分内容来自android 实现app内部检测最新版本 自动升级到最新版本
Android中打开浏览器更新App的最新版本
版权声明:本文标题:Android APP通过浏览器下载最新版本 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1715795660h651645.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论