自定义版本更新弹窗
自定义版本更新弹窗
目录介绍
- 1.本库优势亮点
- 2.使用介绍
- 3.注意要点
- 4.效果展示
- 5.其他介绍
好消息
该库的GitHub地址:https://github.com/yangchong211/YCUpdateApp
- 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计47篇[近20万字],转载请注明出处,谢谢!
- 链接地址:https://github.com/yangchong211/YCBlogs
- 如果觉得好,可以star一下,谢谢!当然也欢迎提出建议,万事起于忽微,量变引起质变!
1.本库优势亮点
- 支持后台下载,支持断点下载。支持监听下载过程,下载成功,失败,异常,下载中,暂停等多种状态
- 用户可以设置是否支持强制更新,还支持用户设置版本更新内容,当内容过长,可以实现滚动模式
- 支持进度条显示,对话框进度条,并且下载中支持通知栏进度条展示,解决8.0通知栏不显示问题
- 由于下载apk到本地需要权限,固在lib中已经处理这个逻辑,只有当有读写权限时才会下载文件,没有权限则跳转设置页面打开权限
- 调用十分简单,相比AppUpdate,CheckVersionLib等库的特点是不用设置http的get或者post请求,只需要传入下载链接就可以
- 相比GitHub上几个主流的版本更新库,我这个lib代码量少很多,我觉得最少最精简的代码完成需要的功能就最好
- 适配 Android 7.0 FileProvider,处理了7.0以上安装apk异常问题,在lib中已经配置了fileProvider,直接使用就可以
- 使用dialogFragment替换了dialog,处理了重建后逻辑,dialogFragment深入分析博客
- 下载完成后自动安装,对于错误的下载链接地址,会下载异常,也可以查看异常的日志
- 当下载完成后,再次弹窗,则会先判断本地是否已经下载,如果下载则直接提示安装
- 支持设置自定义下载文件路径,如果不设置,则直接使用lib中的路径【sd/apk/downApk目录下】
- 当apk下载失败,异常,错误等状态,支持重启下载任务。功能十分强大,已经用于正式app多时,你采用拿来主义使用即可,欢迎提出问题。
2.使用介绍
2.1 关于库导入
- 在build.gradle中直接导入:compile 'cn.yc:YCUpdateLib:1.0.2'
2.2 使用说明
- 代码如下所示,就是这么简单
//设置自定义下载文件路径 UpdateUtils.APP_UPDATE_DOWN_APK_PATH = "apk" + File.separator + "downApk"; String desc = getResources().getString(R.string.update_content_info); /* * @param isForceUpdate 是否强制更新 * @param desc 更新文案 * @param url 下载链接 * @param apkFileName apk下载文件路径名称 * @param packName 包名 */ UpdateFragment.showFragment(MainActivity.this, false,firstUrl,apkName,desc,BuildConfig.APPLICATION_ID);
2.3 lib库中解决了代码中安装 APK文件异常问题【注意lib已经解决该问题】
- 直接调用工具类UpdateUtils.installNormal方法
- 关于在代码中安装 APK 文件,在 Android N 以后,为了安卓系统为了安全考虑,不能直接访问软件,需要使用 fileProvider 机制来访问、打开 APK 文件。里面if 语句,就是区分软件运行平台,来对 intent 设置不同的属性。
/** * 关于在代码中安装 APK 文件,在 Android N 以后,为了安卓系统为了安全考虑,不能直接访问软件 * 需要使用 fileProvider 机制来访问、打开 APK 文件。 * 普通安装 * @param context 上下文 * @param apkPath path,文件路径 * @param pathName 你的包名 */ public static void installNormal(Context context, String apkPath , String pathName) { if(apkPath==null || pathName==null){ return; } Intent intent = new Intent(Intent.ACTION_VIEW); File apkFile = new File(apkPath); // 由于没有在Activity环境下启动Activity,设置下面的标签 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //版本在7.0以上是不能直接通过uri访问的 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //参数1 上下文, 参数2 Provider主机地址 和配置文件中保持一致 参数3 共享的文件 Uri apkUri = FileProvider.getUriForFile(context, pathName+".fileProvider", apkFile); //添加这一句表示对目标应用临时授权该Uri所代表的文件 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); } else { Uri uri = Uri.fromFile(apkFile); intent.setDataAndType(uri, "application/vnd.android.package-archive"); } context.startActivity(intent); }
- 清单文件添加代码如下所示:
<provider android:name=".VersionFileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
- 在res/xml下增加文件:file_paths.xml
<?xml version="1.0" encoding="utf-8"?> <paths> <external-path name="external_files" path="." /> <root-path name="root_path" path="." /> </paths>
3.注意要点
- 注意需要申请读写权限,如果你要使用,可以自定定义通知栏下载UI布局,可以自己设置弹窗UI。这里就不适用正式项目中的UI和图标,图标是使用别人的,请勿商用。
4.效果展示
5.其他介绍
版本更新说明
- v1.0.0 更新于2017年8月13日
- v1.0.1 更新于2017年12月9日
- v1.0.2 更新于2017年11月21日
关于博客汇总链接
关于LICENSE
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
11月22日云栖精选夜读 | 送你一份Spring Boot 知识清单
在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架。或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用。因而Spring Boot应用本质上就是一个基于Spring框架的应用,它是Spring对“约定优先于配置”理念的最佳实践产物,它能够帮助开发者更快速高效地构建基于Spring生态圈的应用。 热点热议 送你一份Spring Boot 知识清单 作者:技术小能手发表在:全栈开发者社区 Java: 未来已来 作者:技术小能手发表在:Java杂记 这一年多来,阿里Blink测试体系如何从0走向成熟? 作者:技术小能手发表在:阿里技术 知识整理 安卓中高级开发面试知识点之——缓存 作者:技术小能手发表在:Android开发中文站 一文读懂 Java 反射机制那些事 作者:技术小能手发表在:web项目聚集地 GitHub上优秀的Go开源项目 作者:技术小能手发表在:Golang语言社区 Java字节码结构剖析二:字段表 作者:技术小能手发表在:Java杂记 MySQL 中一个双引号错位引发的血案 作者:技术小能手发表在:高效运维 美文回顾 2018·...
- 下一篇
Android 中使用 dlib+opencv 实现动态人脸检测
1 概述 完成 Android 相机预览功能以后,在此基础上我使用 dlib 与 opencv 库做了一个关于人脸检测的 demo。该 demo 在相机预览过程中对人脸进行实时检测,并将检测到的人脸用矩形框描绘出来。具体实现原理如下: 采用双层 View,底层的 TextureView 用于预览,程序从 TextureView 中获取预览帧数据,然后调用 dlib 库对帧数据进行处理,最后将检测结果绘制在顶层的 SurfaceView 中。 2 项目配置 由于项目中用到了 dlib 与 opencv 库,因此需要对其进行配置。主要涉及到以下几个方面: 2.1 C++支持 在项目创建过程中依次选择 Include C++ Support、C++11、Exceptions Support ( -fexceptions )以及 Runtime Type Information Support ( -frtti ) 。最后生成的 build.gradle 文件如下: defaultConfig { applicationId "com.example.lightweh.facedetectio...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池