admin 管理员组

文章数量: 887021

Android APP通过浏览器下载最新版本

首先判断app本地的版本和服务器上的版本是否是一样的。如果有新版本,那么就进行更新。
需要服务器端提供两个接口

  1. 获取服务器端apk版本号
  2. 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