Android技术分享| Bugly 应用升级自定义UI

这篇具有很好参考价值的文章主要介绍了Android技术分享| Bugly 应用升级自定义UI。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近项目里的采用免费的Bugly应用升级功能,由于默认的 UI 非常的简陋且与项目整体风格不搭,所以需要自定义UI,本篇文章记录在实现过程中的一些注意事项。根据官方文档可知,自定义升级界面有以下两种方式。

一、固定控件ID

这种方式比较简单,只需要自己编写布局,并设置控件的Tag 即可。

<TextView
 android:layout_width="match_parent"
 android:layout_height="@dimen/dp_62"
 android:gravity="center"
 android:tag="beta_title" //按要求设置Tag即可
 android:textSize="@dimen/sp_16"
 android:textColor="@color/white"
 android:text="发现新版本"/>

这里有个需要注意的地方就是beta_title beta_upgrade_info beta_upgrade_feature beta_cancel_button beta_confirm_button 这几个控件 Tag 缺一不可,缺了会导致整个页面是黑色的。

通过以上设置,基本就可以展示自己的 UI 了,但随即也会发现一个问题:状态栏是黑色,下方还有一条灰色的类似 ActionBa r的东西。

查阅文档发现,可以注 Bugly 弹窗的生命周期回调,如下所示。

Beta.upgradeDialogLifecycleListener = object :UILifecycleListener<UpgradeInfo>{
            override fun onCreate(p0: Context?, p1: View?, p2: UpgradeInfo?) {
            }

            override fun onStart(p0: Context?, p1: View?, p2: UpgradeInfo?) {
            }

            override fun onResume(p0: Context?, p1: View?, p2: UpgradeInfo?) {
            }

            override fun onPause(p0: Context?, p1: View?, p2: UpgradeInfo?) {
            }

            override fun onStop(p0: Context?, p1: View?, p2: UpgradeInfo?) {
            }

            override fun onDestroy(p0: Context?, p1: View?, p2: UpgradeInfo?) {
            }

        }

对应的就是 BetaActivity 的生命周期,于是只需要在 onCreate 回调中,设置沉浸式状态即可。

至于怎么设置可以按照自己项目里的来,我设置了沉浸式,但有一条灰色的还是去不掉。而且这个方式无法满足我

们项目产品的要求,需要有进度条显示。于是可以用另外一种自定义 Activity的方式。

二、自定义Activity

使用这种方式虽然比第一种稍微复杂了一点点🤏,但是可定制的范围却大了很多。弹窗界面的绘制与生命周期均由自己维护,Bugly 负责下载时回调与事件上报,并提供相关接口控制任务下载,获取任务状态等。

1.设置接收更新策略回调
Beta.upgradeListener = object : UpgradeListener {
            override fun onUpgrade(p0: Int, p1: UpgradeInfo?, p2: Boolean, p3: Boolean) {
                p1?.let {
                    startActivity(Intent(applicationContext, UpdateActivity::class.java).apply {
                        flags = Intent.FLAG_ACTIVITY_NEW_TASK
                    })
                }
            }
  }

注意这一步要写在 init 之前。在这里判断了 如果 UpgradeInfo 不会null的话,说明有更新了,于是跳转到自定义的 Activity 即可。

更新一般都是弹窗,然后我们跳转到 Activity,就无法看见下方 Activity,跳转动画也比较生硬,符合习惯的应该是像普通弹窗一样弹出即可。所以这里需要将 Activity Dialog化。

2. 设置 Activity 透明

只需要自定义一个 Style 即可,如下。

<style name="updateStyle" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowFrame">@null</item>
        <!-- 半透明 -->
        <item name="android:windowIsTranslucent">true</item>
        <!-- 无标题 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 背景透明 -->
        <item name="android:windowBackground">@color/transparent</item>
        <!-- 是否允许对话框的背景变暗 -->
        <item name="android:backgroundDimEnabled">true</item>
</style>

然后给自定义的Activity设置上即可。

 <activity
            android:name=".activity.setting.UpdateActivity"
            android:exported="false"
            android:theme="@style/updateStyle"
            android:screenOrientation="portrait"/>
Android技术分享| Bugly 应用升级自定义UI

如图所示,Activity 已经变得和 Dialog 一模一样了。

3.获取策略信息
val upgradeInfo = Beta.getUpgradeInfo()
binding.run {
   if (upgradeInfo.upgradeType==2){//如果是强制升级
        betaCancelButton.gone()//隐藏下次再说按钮
    }
    betaUpgradeFeature.text = upgradeInfo.newFeature //显示更新内容
}

UpgradeInfo 包含如下信息,如果是强制升级的话,需要隐藏相应按钮,并且屏蔽掉返回按键。

		public String id = "";//唯一标识
    public String title = "";//升级提示标题
    public String newFeature = "";//升级特性描述
    public long publishTime = 0;//升级发布时间,ms
    public int publishType = 0;//升级类型 0测试 1正式
    public int upgradeType = 1;//升级策略 1建议 2强制 3手工
    public int popTimes = 0;//提醒次数
    public long popInterval = 0;//提醒间隔
    public int versionCode;
    public String versionName = "";
    public String apkMd5;//包md5值
    public String apkUrl;//APK的CDN外网下载地址
    public long fileSize;//APK文件的大小
    pubilc String imageUrl; // 图片url
4.获取下载任务
 var strategyTask = Beta.getStrategyTask()

在 strategyTask 对象中,我们可以判断之前是否已经下载完了。

strategyTask?.let {
    if (it.saveFile!=null){
         betaCancelButton.gone()
         betaConfirmButton.text = "安装"
         isFileSave = true
      }
    }

如果存在之前下载好但没安装的 Apk ,就可以直接去安装即可。

 Beta.installApk(strategyTask?.saveFile)
4.下载
 //首先 Activity 实现 DownloadListener 接口
class UpdateActivity : AppCompatActivity(), DownloadListener {
		override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Beta.registerDownloadListener(this)//注册下载事件回调
     }
     
      override fun onDestroy() {
        super.onDestroy()
        Beta.unregisterDownloadListener()//取消监听下载事件
    }
    
     override fun onBackPressed() {
     	//屏蔽返回按钮
    }

		//下载接收中
    override fun onReceive(p0: DownloadTask?) {
    p0?.let {        		binding.pb.setProgress(((it.savedLength.toDouble()/it.totalLength.toDouble())*100).toInt())
       }
    }
		//下载完成
    override fun onCompleted(p0: DownloadTask?) {
       binding.betaConfirmButton.text = "安装"
        binding.betaConfirmButton.isClickable = true
        isFileSave = p0?.saveFile!=null
    }
		//下载失败
    override fun onFailed(p0: DownloadTask?, p1: Int, p2: String?) {
    
    }
}

我们先注册回调,直接调用Beta.startDownload()就可以开始下载了,在onReceive 中可以获取下载进度。下载完成后会自定安装。也可以设置 Beta.autoInstallApk = false手动安装

三:显示小红点

在 App 关于中,一般都有一个版本显示,点击可以手动检查更新,或者又更新的话显示一个小红点提醒用户去点击,用Bugly其实也可以实现,步骤如下。

 Beta.getUpgradeInfo()?.let {
    ivRedDot.show()
 }?:let { ivRedDot.gone() }

获取升级信息,不为null就说明又更新策略,显示小红点即可。

下面是点击检查升级,注意第二个参数,是是否显示弹窗。

rlCheckUpdate.click {
   Beta.checkUpgrade(true,false)
}

以上就是关于 Bugly 应用升级相关功能的实现记录。

Android技术分享| Bugly 应用升级自定义UI文章来源地址https://www.toymoban.com/news/detail-434075.html

到了这里,关于Android技术分享| Bugly 应用升级自定义UI的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【技术分享】RK356X Android 使用 libgpiod 测试gpio

    前言 libgpiod 是用于与 Linux GPIO 字符设备交互的 C 库和工具库;此项目包含六种命令行工具(gpiodetect、gpioinfo、gpioset、gpioget、gpiomon),使用这些工具可以在命令行设置和获取GPIO的状态信息;在程序开发中也可以调用库提供的API接口来控制GPIO。本文内容可适用于RK3566系列开发

    2024年02月05日
    浏览(50)
  • 技术分享 | EdgeX应用落地——零售、能源行业创新业务

    关于2022 EdgeX中国挑战赛 2022 EdgeX中国挑战赛暨中关村国际前沿科技创新大赛EdgeX专题赛正式拉开帷幕。大赛由北京市科委、中关村管委会指导,由Linux基金会主办,由阿里云、百度智能云、EMQ、GSMA 5G IN、英特尔、InnoSpace、中科创达、VMware、紫竹ET孵化器等联合承办单位共同支持

    2024年02月03日
    浏览(49)
  • AI视频智能识别技术在智慧农业大棚升级改造管理场景中的应用方案

    随着科技的进步和农业现代化的推进,智能化技术逐渐成为现代农业发展的重要支撑。农业大棚作为现代农业的重要组成部分,其智能化改造对于提高农业生产效率、降低成本、增加收益具有重要意义。利用先进的信息化手段来对农业大棚进行管理,采集和掌握作物的生长状

    2024年02月21日
    浏览(55)
  • AIGC内容分享(二):全球大模型技术与应用分析

    目录 前言 人工智能技术回顾 AIGC近期动态梳理 1. 国内动态 2. 国外动态 3. OpenAI的关键动作 4. AIGC的技术变革  AIGC的关键应用 1. AIGC应用背后的驱动力 2. AIGC的三大原能力 3.  AIGC的四大产品形态 大模型如何融入行业? 1. 通用行业融合 2. 垂直行业融合 这篇文章主要阅读者是产品

    2024年01月16日
    浏览(54)
  • 课程《FPGA技术及应用》作业分享(合肥工业大学仪器学院)

    合工大测控系教学 1. 简述EDA技术的发展进程。简要叙述什么是EDA技术。 EDA技术(Electronic Design Automation)是一种用于电子产品设计与制造的软件工具。 EDA技术的发展进程: 1960年代:开发出第一代EDA工具,用于电路设计与模拟。 1970年代:EDA工具发展到第二代,支持二维自动

    2024年02月03日
    浏览(65)
  • 数字化孪生技术在工业上的应用场景和案例分享

    编者按:数字化孪生是一个完整的生命周期概念,它从设计和制造开始,贯穿整个生产过程,直到产品退役。数字化孪生将现实世界和虚拟世界相结合,使企业能够更好地理解和优化物理系统的运行情况,从而提高生产效率,降低成本,并提高产品质量和客户满意度。在工业

    2024年02月04日
    浏览(50)
  • 深度解析NLP文本摘要技术:定义、应用与PyTorch实战

    在本文中,我们深入探讨了自然语言处理中的文本摘要技术,从其定义、发展历程,到其主要任务和各种类型的技术方法。文章详细解析了抽取式、生成式摘要,并为每种方法提供了PyTorch实现代码。最后,文章总结了摘要技术的意义和未来的挑战,强调了其在信息过载时代的

    2024年02月05日
    浏览(54)
  • AIGC内容分享(二十):「AI视频生成」技术核心基础知识和模型应用

    目录 何为AI视频? 一、技术发展概况 二、代表模型及应用​​​​​​​ 三、仍存在许多技术难点 「 AI 视频」 通常指的是由人工智能(AI)技术生成或处理的视频。这可能包括使用深度学习、计算机视觉和其他相关技术来改善视频的质量、内容或生成全新的视频内容。一

    2024年01月18日
    浏览(56)
  • 大数据深度解析NLP文本摘要技术:定义、应用与PyTorch实战

    在本文中,我们深入探讨了自然语言处理中的文本摘要技术,从其定义、发展历程,到其主要任务和各种类型的技术方法。文章详细解析了抽取式、生成式摘要,并为每种方法提供了PyTorch实现代码。最后,文章总结了摘要技术的意义和未来的挑战,强调了其在信息过载时代的

    2024年02月03日
    浏览(45)
  • 玖章算术CEO叶正盛在数据技术嘉年华分享NineData AIGC的应用实践

    4月8日下午,为期两天的第十二届数据技术嘉年华(DTC 2023)在北京新云南皇冠假日酒店圆满落下帷幕。大会得到了工业和信息化部电子五所的支持和指导,围绕“开源·融合·数字化——引领数据技术发展,释放数据要素价值”这一主题,通过一场主论坛和十二场专题论坛,

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包