Android 使用updatefun 来自动更新

2023-10-29

这几天研究了一下APP的自动更新,并且是那种最方便使用的,找了一下,找到一个框架:updatefun,使用方法比较简单,记录一下使用方法和遇到的问题。

使用步骤

1、使用Android studio 的依赖方式:

dependencies { 
compile 'cn.hugeterry.updatefun:updatefun:1.6.0' 
} 

版本好像到1.8.6以上了
2、在APP的的activity 代码的onCreate()中加上以下语句进行初始化(需要注意的是,代码放在 setContentView()方法的后面):

UpdateKey.API_TOKEN = "写上你 fir.im 账号的 API_TOKEN";
UpdateKey.APP_ID = "写上 APP 的应用 ID";
//下载方式:
//UpdateKey.DialogOrNotification=UpdateKey.WITH_DIALOG;通过 Dialog 来进行下载
//UpdateKey.DialogOrNotification=UpdateKey.WITH_NOTIFITION;通过通知栏来进行下载(默认)
UpdateFunGO.init(this);

在onCreate()里写完初始化后,就到onResume()和onStop()加入一下代码:

@Override
    protected void onResume() {
        super.onResume();
        UpdateFunGO.onResume(this);
    }
  @Override
     protected void onStop() {
         super.onStop();
         UpdateFunGO.onStop(this);
     }

代码到处就算写完
4、fir.im 账号的 API_TOKEN和应用ID的来历
首先在fir.im 上注册账号,在fir.im的个人头像下找到API token,生成即可,记录下来,备用。
接着可在fir.im上传自己的未完成APP,获取到应用ID,记录下来备用。

5、获取完API token和 APP id后,就可以在代码用填入,并修改APP的版本号,打包上传到fir.im 。

defaultConfig {
        applicationId "com.example."
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.3"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        resValue "string", "updatefun_provider_file_authorities", "com.example.administrator.myapplication.fileprovider"
    }

6、手动更新的方法:
updatefun 的版本需 1.8.4 以上,依赖和加入token,APP id,参考上面
在需要调用更新的时候调用代码:

UpdateFunGO.manualStart(this);

和onResume()和onStop()的代码:

 @Override
    protected void onResume() {
        super.onResume();
        UpdateFunGO.onResume(this);
    }
  @Override
     protected void onStop() {
         super.onStop();
         UpdateFunGO.onStop(this);
     }

7、在使用中遇到的问题
在安卓7.0 中由于新特性,报出: android.os.FileUriExposedException这个异常

android.os.FileUriExposedException: file:///sdcard/UpdateFun/com.example.administrator.myapplication.apk exposed beyond app through Intent.getData()
                                                                                           at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)
                                                                                           at android.net.Uri.checkFileUriExposed(Uri.java:2346)
                                                                                           at android.content.Intent.prepareToLeaveProcess(Intent.java:8971)
                                                                                           at android.content.Intent.prepareToLeaveProcess(Intent.java:8932)
                                                                                           at android.app.Instrumentation.execStartActivity(Instrumentation.java:1517)
                                                                                           at android.app.Activity.startActivityForResult(Activity.java:4252)
                                                                                           at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
                                                                                           at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:65)
                                                                                           at android.app.Activity.startActivityForResult(Activity.java:4210)
                                                                                           at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:711)
                                                                                           at android.app.Activity.startActivity(Activity.java:4549)
                                                                                           at android.app.Activity.startActivity(Activity.java:4517)
                                                                                           at cn.hugeterry.updatefun.module.Download.installApk(Download.java:193)
                                                                                           at cn.hugeterry.updatefun.module.Download.access$900(Download.java:36)
                                                                                           at cn.hugeterry.updatefun.module.Download$1.handleMessage(Download.java:88)
                                                                                           at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                           at android.os.Looper.loop(Looper.java:154)
                                                                                           at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
                                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:792)

折腾了挺久,没搞定,后面就用了个笨方法,将 targetSdkVersion 降低到22,发现可以正常安装,勉为其难的用着吧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 使用updatefun 来自动更新 的相关文章

  • 在根项目“bin”中找不到任务“bintrayUpload”

    我遵循了将 AAR 文件发布到 JCenter 所需的每个步骤 然后使用 Maven Central 将其同步https github com danielemaddaluno gradle jcenter publish https gi
  • 如何在 Android 中更改 Drawable 的颜色?

    我正在开发一个 Android 应用程序 并且我有一个从源图像加载的可绘制对象 在此图像上 我想将所有白色像素转换为不同的颜色 例如蓝色 然后缓存生成的 Drawable 对象 以便稍后使用它 举例来说 假设我有一个 20x20 PNG 文
  • 如何在应用程序关闭时在 Android 通知中显示操作按钮?

    我有一个安卓应用程序 对于通知 我们必须显示一些操作按钮 当应用程序打开时 我们可以自由地构建通知并显示操作按钮 但是当应用程序关闭时 通知会在 Android 的通知托盘中收到 应用程序开发人员无法控制构建用户界面和操作按钮 我们现在如何
  • Android 中的 Fragment-Fragment 通信

    我在Android编程方面处于初级水平 所以我需要你真诚的帮助 请任何人帮助我 我正在尝试使用片段构建滑动用户界面 所以我真正的疑问是 我有一个Fragment say FragmentA 它有一个TextView and Button在其
  • 改造中的多个队列导致内存不足错误?

    我正在使用retrofit2 做我的项目 当我的呼叫失败时 我再次重复相同的呼叫 重复此 呼叫使我的应用程序强制关闭 当我查看日志时 我得到了错误日志 如下所示 我觉得这是由于同一呼叫的多次排队造成的 所以我在排队之前就这样做了 我打电话给
  • Fragment 问题中的 ExpandableListView

    我正在尝试在片段中实现可扩展列表视图 没有错误出现 当我尝试记录两个的输出时List
  • Android上如何获取ImageView的Drawable的矩形?

    我想要获取将包裹 ImageView 的 Drawable 的矩形对象 而不是包裹 ImageView 的矩形 我将使用该矩形在 Drawable 周围绘制一些奇特的矩形 我怎样才能得到那个矩形 Rect rect new Rect Ima
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • MIUI 权限被拒绝活动 KeyguardLocked

    当应用程序处于后台且屏幕被锁定时 我无法启动活动 没有异常或警告 只是不调用 onCreate 我一直在与这个问题作斗争 我想我终于找到了它的根源 日志中有一行 D com android server am ExtraActivityMa
  • 控制 OverlayItem 大小

    我正在构建一个在单个 ItemizedOverlay 中包含几十个 OverlayItems 的地图 我的地图设计为可以非常近距离地查看 大约缩放级别 18 并且 OverlayItems 彼此非常接近 地图放大时看起来不错 但是 如果用户
  • 如何使用 SharedPreferences 保存多个值?

    我正在开发一个字典应用程序 在我的应用程序中 我假设用户想要保存最喜欢的单词 我决定使用共享首选项保存这些值 我知道 SQLite 和文件更好 但我坚持使用 SharedPreferences 所以继续使用它 下面是我的代码 Overrid
  • Android 上的 MIDI:Java 和/或 AIR 库

    一段时间以来 我一直在考虑在 iPad 上 重新 构建一个应用程序 其中我将使用 Objective C 和DSMI http dsmi tobw net 将 MIDI 信号发送到主机 这还不错 我的意思是 除了实际编写应用程序之外 现在我
  • 当 minifyEnabled 为 true 时 Android 应用程序崩溃

    我正在使用多模块应用程序 并且该应用程序崩溃时minifyEnabled true in the installed模块的build gradle 以下是从游戏控制台检索到的反混淆堆栈跟踪 FATAL EXCEPTION Controlle
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • 无法使用 findViewById() 找到视图

    我找不到TextView通过致电findViewById 即使 ID 确实存在 OtherActivity public class OtherActivity extends Activity Override protected voi
  • 使用 Play Integrity API 时,Firebase 电话身份验证会出现缺少客户端标识符错误

    使用 Firebase 电话身份验证注册 登录时 身份验证流程始终会启动 reCAPTCHA 流程 并在返回应用程序后发出missing client identifier error 我的设置之前适用于设备验证 安全网络 API 除了我的
  • Android SearchView 在启动时隐藏键盘

    我有一个小问题正在尝试解决 当我打开应用程序时 键盘会显示输入搜索视图的查询 不过 我只想在单击搜索视图时显示键盘 我该如何解决 Thanks 这对我有用 用于隐藏焦点的代码 searchView SearchView view findV
  • onTaskRemoved() 在华为和小米设备中没有被调用

    我一直在使用onTaskRemoved 服务中的方法 用于检测应用程序何时通过滑动从设备最近列表中删除 我执行一些日志记录和发生这种情况时需要执行的一些其他操作 它工作完美 然后我在运行Android 6 0的华为设备上检查了这个方法 该方
  • 如何在android中通过蓝牙向配对设备发送短信?

    在我的应用程序中 我想通过蓝牙发送和接收短信 我可以在列表视图中看到配对设备名称和地址的列表 但是当我尝试向配对设备发送文本时 什么也没有发生 在其他设备中没有收到文本 这是我向配对设备发送消息的代码 private void sendDa
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try

随机推荐

  • 零基础小白如何入门python爬虫?3年程序员分享python爬虫学习攻略(文内有福利)

    如果你是非计算机专业 完全是零基础编程 这篇文章就是专门为你写的 内容不长 2分钟就能看完 但还是希望能给你一些帮助 以前从纯白零基础学Python 很多坑都没人踩 现在经常看到很多Python学习群里的新朋友总是喊着 从入门到放弃 觉得学
  • 【ROS】ROS1人机界面开发:在QtCreator中创建ROS1功能包

    ROS 郭老二博文之 ROS目录 1 版本要求 ROS的QtCreator插件要和QtCreator版本对应一致 否则报错 本人QtCreator版本为 10 0 1 需要下载安装ros qtc plugin的版本也要为10 0版本 2 安
  • 用Python绘制地理图

    当您的数据包含地理信息时 丰富的地图可视化可以为您理解数据和解释分析结果的最终用户提供重要价值 Plotly Plotly是一个著名的库 用于在Python中创建交互式绘图和仪表板 安装Plotly 在命令提示符中运行这两个命令 以在我们的
  • 六、windows环境下netcat的安装及使用

    windows环境下netcat的安装及使用 s小菜鸟 2019 01 03 21 05 51 5080 收藏 14 1 下载netcat 下载地址 https eternallybored org misc netcat 2 解压文件 3
  • Java中的NIO编程

    1 BIO和NIO简介 BIO NIO AIO简介 1 Java BIO 同步并阻塞 传统阻塞型 服务器实现模式为一个连接一个线程 即客户端有连接请求时服务器端就需要启动一个线程进行处理 如果这个连接不做任何事情会造成不必要的线程开销 2
  • 中国天气网全城市代码weather_cityId

    Ctrl F 查询 城市名字 http mobile weather com cn data forecast 101010100 html 1381891660081 北京 gt 101010100 海淀 gt 101010200 朝阳
  • 【openWrt】自定义后台访问端口

    通过ssh访问openwrt系统 修改 ect config uhttpd文件 再重启openwrt即可
  • 无人不苦,不必喊疼

    张爱玲说 生活是一袭华美的长袍 里面爬满了虱子 对于大多数人来说 生活都是外面光鲜亮丽 里面却各有各的苦楚 尤其对于成人 更是早已被生活的风霜 侵袭得体无完肤 可是 生活再不易 也总要拼尽了全力往前走 才能趟过荆棘丛生 走上康庄大道 1成人
  • ArrayList源码分析(基于JDK11)

    ArrayList源码分析 基于JDK11 类字段 private static final long serialVersionUID 8683452581122892189L private static final int DEFAU
  • JMETER:Uncaught exception in thread Thread

    Uncaught exception in thread Thread AWT EventQueue 0 6 main 调用测试片段错误 循环调用了
  • Jmeter中正则表达式提取器使用详解

    转载地址 http blog csdn net quiet girl article details 50724313 在使用Jmeter过程中 会经常使用到正则表达式提取器提取器 虽然并不直接涉及到请求的测试 但是对于数据的传递起着很大的
  • linux查看磁盘io性能

    1 查看磁盘 IO 性能 1 1 top 命令 top 命令通过查看 CPU 的 wa 值来判断当前磁盘 IO 性能 如果这个数值过大 很可能是磁盘 IO 太高了 当然也可能是其他原因 例如网络 IO 过高等 1 2 sar 命令 sar
  • Jupyter Notebook使用-如何设置代码单元启用自动换行

    最近开始使用 Jupyter Notebook 至于它的强大功能不需要我做过多介绍 接下来直接进入正题 在使用的过程中我发现了一个这样的问题 当编辑的代码过长时将会出现滚动条 滑动条 像下面这样 但是当我将滚动条拉到底时 问题出现了 侧边栏
  • 代码审计-Java项目&JDBC&Mybatis&Hibernate&注入&预编译&写法

    文章目录 Javaweb 数据库操作 模式 写法 预编译等 环境搭建 JDBC 注入分析 关于预编译 Mybatis 注入分析 Hibernate 注入分析 总结 Javaweb 代码审计SQL注入 INXEDU在线网校 Javaweb 数
  • python构建IP代理池(Proxy Pool)

    基本原理 代理实际上指的就是代理服务器 它的功能是代理网络用户去取得网络信息 也可以说它是网络信息的中转站 在我们正常请求一个网站时 是将请求发送给 Web 服务器 Web 服务器把响应传回给我们 如果设置了代理服务器 实际上就是在本机和服
  • 多数据源配置(application.properties或application.yml配置详情)

    1 导入Maven依赖
  • ssh key问题解决

    u r the butter of my bread the breath to my life Julie Julia 某些情况下 原来的ssh连接会失效 比如误删了 ssh下面的东西 这时 需要重新生成key并加入gitlab或gith
  • 列表的基本操作

    描述 在两行中分别输入一个字符串 分别将其转换为列表 a 和 b 按要求完成以下功能 1 输出两个列表的拼接结果 2 输出列表 a 重复3次的结果 3 输出列表 b 中第3个元素和最后一个元素 4 输出列表 a 中序号1至4之间的元素 5
  • git工具下载

    文章目录 下载客户端 git下载教程 git下载地址 Tortoise下载地址 Tortoise下载教程 Git以及Github详细解析教程 码云学习安装视频 下载客户端 git下载教程 https www cnblogs com xuew
  • Android 使用updatefun 来自动更新

    这几天研究了一下APP的自动更新 并且是那种最方便使用的 找了一下 找到一个框架 updatefun 使用方法比较简单 记录一下使用方法和遇到的问题 使用步骤 1 使用Android studio 的依赖方式 dependencies co