高阶使用 · xuexiangjys/XUpdate Wiki · GitHub 您所在的位置:网站首页 pull解析器 高阶使用 · xuexiangjys/XUpdate Wiki · GitHub

高阶使用 · xuexiangjys/XUpdate Wiki · GitHub

2024-01-20 13:17| 来源: 网络整理| 查看: 265

自定义版本更新提示弹窗的主题

通过设置更新顶部图片、主题色、按钮文字颜色、宽高比率等来实现自定义主题样式.

promptThemeColor: 设置主题颜色 promptButtonTextColor: 设置按钮的文字颜色 promptTopResId: 设置顶部背景图片ID promptTopDrawable: 设置顶部背景图片 promptTopBitmap: 设置顶部背景图片 promptWidthRatio: 设置版本更新提示器宽度占屏幕的比例,默认是-1,不做约束 promptHeightRatio: 设置版本更新提示器高度占屏幕的比例,默认是-1,不做约束 XUpdate.newBuild(getActivity()) .updateUrl(mUpdateUrl) .promptThemeColor(ResUtils.getColor(R.color.update_theme_color)) .promptButtonTextColor(Color.WHITE) .promptTopResId(R.mipmap.bg_update_top) .promptWidthRatio(0.7F) .update(); 自定义版本更新解析器

实现IUpdateParser接口即可实现解析器的自定义。

XUpdate.newBuild(getActivity()) .updateUrl(mUpdateUrl3) .updateParser(new CustomUpdateParser()) //设置自定义的版本更新解析器 .update(); public class CustomUpdateParser implements IUpdateParser { @Override public UpdateEntity parseJson(String json) throws Exception { CustomResult result = JsonUtil.fromJson(json, CustomResult.class); if (result != null) { return new UpdateEntity() .setHasUpdate(result.hasUpdate) .setIsIgnorable(result.isIgnorable) .setVersionCode(result.versionCode) .setVersionName(result.versionName) .setUpdateContent(result.updateLog) .setDownloadUrl(result.apkUrl) .setSize(result.apkSize); } return null; } } 自定义版本更新检查器+版本更新解析器+版本更新提示器

实现IUpdateChecker接口即可实现检查器的自定义。

实现IUpdateParser接口即可实现解析器的自定义。

实现IUpdatePrompter接口即可实现提示器的自定义。

XUpdate.newBuild(getActivity()) .updateUrl(mUpdateUrl3) .updateChecker(new DefaultUpdateChecker() { @Override public void onBeforeCheck() { super.onBeforeCheck(); CProgressDialogUtils.showProgressDialog(getActivity(), "查询中..."); } @Override public void onAfterCheck() { super.onAfterCheck(); CProgressDialogUtils.cancelProgressDialog(getActivity()); } }) .updateParser(new CustomUpdateParser()) .updatePrompter(new CustomUpdatePrompter(getActivity())) .update(); public class CustomUpdatePrompter implements IUpdatePrompter { private Context mContext; public CustomUpdatePrompter(Context context) { mContext = context; } @Override public void showPrompt(@NonNull UpdateEntity updateEntity, @NonNull IUpdateProxy updateProxy, @NonNull PromptEntity promptEntity) { showUpdatePrompt(updateEntity, updateProxy); } /** * 显示自定义提示 * * @param updateEntity * @param updateProxy */ private void showUpdatePrompt(final @NonNull UpdateEntity updateEntity, final @NonNull IUpdateProxy updateProxy) { String updateInfo = UpdateUtils.getDisplayUpdateInfo(mContext, updateEntity); new AlertDialog.Builder(mContext) .setTitle(String.format("是否升级到%s版本?", updateEntity.getVersionName())) .setMessage(updateInfo) .setPositiveButton("升级", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { updateProxy.startDownload(updateEntity, new OnFileDownloadListener() { @Override public void onStart() { HProgressDialogUtils.showHorizontalProgressDialog(mContext, "下载进度", false); } @Override public void onProgress(float progress, long total) { HProgressDialogUtils.setProgress(Math.round(progress * 100)); } @Override public boolean onCompleted(File file) { HProgressDialogUtils.cancel(); return true; } @Override public void onError(Throwable throwable) { HProgressDialogUtils.cancel(); } }); } }) .setNegativeButton("暂不升级", null) .setCancelable(false) .create() .show(); } 自定义文件加密校验器

本框架默认使用的文件加密校验方法是MD5加密方式,当然如果你不想使用MD5加密,你也可以自定义文件加密器IFileEncryptor,以下是MD5文件加密器的实现供参考:

/** * 默认的文件加密计算使用的是MD5加密 * * @author xuexiang * @since 2019-09-06 14:21 */ public class DefaultFileEncryptor implements IFileEncryptor { /** * 加密文件 * * @param file * @return */ @Override public String encryptFile(File file) { return Md5Utils.getFileMD5(file); } /** * 检验文件是否有效(加密是否一致) * * @param encrypt 加密值, 如果encrypt为空,直接认为是有效的 * @param file 需要校验的文件 * @return 文件是否有效 */ @Override public boolean isFileValid(String encrypt, File file) { return TextUtils.isEmpty(encrypt) || encrypt.equalsIgnoreCase(encryptFile(file)); } }

最后再调用XUpdate.get().setIFileEncryptor方法设置即可生效。

只使用XUpdate的下载器功能进行apk的下载 XUpdate.newBuild(getActivity()) .apkCacheDir(PathUtils.getExtDownloadsPath()) //设置下载缓存的根目录 .build() .download(mDownloadUrl, new OnFileDownloadListener() { //设置下载的地址和下载的监听 @Override public void onStart() { HProgressDialogUtils.showHorizontalProgressDialog(getContext(), "下载进度", false); } @Override public void onProgress(float progress, long total) { HProgressDialogUtils.setProgress(Math.round(progress * 100)); } @Override public boolean onCompleted(File file) { HProgressDialogUtils.cancel(); ToastUtils.toast("apk下载完毕,文件路径:" + file.getPath()); return false; } @Override public void onError(Throwable throwable) { HProgressDialogUtils.cancel(); } }); 只使用XUpdate的APK安装的功能 _XUpdate.startInstallApk(getContext(), FileUtils.getFileByPath(PathUtils.getFilePathByUri(getContext(), data.getData()))); //填写文件所在的路径

如果你的apk安装与众不同,你可以实现自己的apk安装器。你只需要实现OnInstallListener接口,并通过XUpdate.setOnInstallListener进行设置即可生效。

国际化配置

由于作者水平有限, 目前只支持中文和英文两种语言的显示【默认语言是英语】。需要支持其他语言的,只需要在自己项目的res下新建对应的语言文件,进行多语言的翻译即可。

需要翻译的详细内容参见 xupdate_strings.xml 文件。

什么?你还不会Android的多语言配置?建议你看一下这篇文章:Android项目国际化多国语言适配



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有