找回密码
 免费注册

QQ登录

只需一步,快速开始

搜索
查看: 10|回复: 0

【教程】远程版本大于本地版本提示更新

[复制链接]

【教程】远程版本大于本地版本提示更新

[复制链接]

幼儿园


UID
144
主题
7
回帖
0
金币
0 枚
银币
23 枚
铜币
27 枚
下载币
48 枚
在线时间
4 小时

QQ

最佳新人活跃会员热心会员

xk***

幼儿园


UID
144
主题
7
回帖
0
金币
0 枚
银币
23 枚
铜币
27 枚
下载币
48 枚
在线时间
4 小时

QQ

最佳新人活跃会员热心会员

前天 13:29 | 显示全部楼层 |阅读模式 来自 湖南

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?免费注册

×
  1. -- ========== 导入包 ==========
  2. require "import"
  3. import "android.app.*"
  4. import "android.os.*"
  5. import "android.widget.*"
  6. import "android.view.*"
  7. import "android.app.Dialog"
  8. import "android.widget.LinearLayout"
  9. import "android.widget.TextView"
  10. import "android.widget.Button"
  11. import "android.widget.ScrollView"
  12. import "android.view.Gravity"
  13. import "android.graphics.drawable.GradientDrawable"
  14. import "android.graphics.Typeface"
  15. import "android.os.Build"
  16. import "android.view.View"
  17. import "android.content.Intent"
  18. import "android.net.Uri"

  19. -- ========== 获取当前版本 ==========
  20. function getCurrentVersion()
  21.     local pkgInfo = activity.getPackageManager().getPackageInfo(activity.getPackageName(), 0)
  22.     return pkgInfo.versionName
  23. end

  24. -- ========== 版本号比较 ==========
  25. function compareVersion(v1, v2)
  26.     local function split(v)
  27.         local t = {}
  28.         for s in string.gmatch(v, "([^%.]+)") do
  29.             table.insert(t, tonumber(s) or 0)
  30.         end
  31.         return t
  32.     end
  33.     local a, b = split(v1), split(v2)
  34.     for i = 1, math.max(#a, #b) do
  35.         local x = a[i] or 0
  36.         local y = b[i] or 0
  37.         if x > y then return 1
  38.         elseif x < y then return -1 end
  39.     end
  40.     return 0
  41. end

  42. function makeRoundBg(color, radius)
  43.     local g = GradientDrawable()
  44.     g.setColor(color)
  45.     g.setCornerRadius(radius)
  46.     return g
  47. end

  48. function showUpdateDialog(version, changelog, downloadUrl, callback)
  49.     local root = LinearLayout(activity)
  50.     root.setOrientation(LinearLayout.VERTICAL)
  51.     root.setGravity(Gravity.CENTER)
  52.     root.setPadding(30, 30, 30, 30)
  53.     root.setBackgroundColor(0x00000000)
  54.     local card = LinearLayout(activity)
  55.     card.setOrientation(LinearLayout.VERTICAL)
  56.     card.setPadding(45, 35, 45, 30)
  57.     local cardBg = makeRoundBg(0xFFFFFFFF, 32)
  58.     card.setBackgroundDrawable(cardBg)
  59.     if Build.VERSION.SDK_INT >= 21 then
  60.         pcall(function()
  61.             card.setElevation(card, 16)
  62.             card.setTranslationZ(card, 8)
  63.         end)
  64.     end
  65.     root.addView(card, LinearLayout.LayoutParams(-1, -2))
  66.     -- 顶部装饰条
  67.     local topBar = View(activity)
  68.     local barBg = GradientDrawable()
  69.     barBg.setOrientation(GradientDrawable.Orientation.LEFT_RIGHT)
  70.     barBg.setColors({0xFF1677FF, 0xFF69C0FF})
  71.     barBg.setCornerRadius(16)
  72.     topBar.setBackgroundDrawable(barBg)
  73.     card.addView(topBar, LinearLayout.LayoutParams(-1, 8))
  74.     -- 图标
  75.     local iconLayout = LinearLayout(activity)
  76.     iconLayout.setGravity(Gravity.CENTER)
  77.     iconLayout.setPadding(0, 20, 0, 10)
  78.     local iconBg = GradientDrawable()
  79.     iconBg.setShape(GradientDrawable.OVAL)
  80.     iconBg.setColors({0xFF1677FF, 0xFF69C0FF})
  81.     iconBg.setOrientation(GradientDrawable.Orientation.TOP_BOTTOM)
  82.     iconBg.setSize(80, 80)
  83.     local icon = TextView(activity)
  84.     icon.setBackgroundDrawable(iconBg)
  85.     icon.setText("🎉")
  86.     icon.setTextSize(40)
  87.     icon.setGravity(Gravity.CENTER)
  88.     icon.setTextColor(0xFFFFFFFF)
  89.     icon.setPadding(0, 8, 0, 0)
  90.     iconLayout.addView(icon)
  91.     card.addView(iconLayout)
  92.     -- 标题
  93.     local title = TextView(activity)
  94.     title.setText("发现新版本")
  95.     title.setTextSize(26)
  96.     title.setTextColor(0xFF1677FF)
  97.     title.setGravity(Gravity.CENTER)
  98.     title.setTypeface(Typeface.DEFAULT_BOLD)
  99.     title.setPadding(0, 2, 0, 0)
  100.     card.addView(title)
  101.     -- 版本号
  102.     local versionText = TextView(activity)
  103.     versionText.setText("v" .. version)
  104.     versionText.setTextSize(20)
  105.     versionText.setTextColor(0xFF1677FF)
  106.     versionText.setGravity(Gravity.CENTER)
  107.     versionText.setTypeface(Typeface.DEFAULT_BOLD)
  108.     versionText.setPadding(0, 0, 0, 18)
  109.     card.addView(versionText)
  110.     local density = activity.getResources().getDisplayMetrics().density
  111.     local maxHeightPx = math.floor(200 * density)
  112.     local scroll = ScrollView(activity)
  113.     scroll.setPadding(0, 0, 0, 0)
  114.     scroll.setLayoutParams(LinearLayout.LayoutParams(-1, -2))
  115.     local contentBg = makeRoundBg(0xFFF0F6FF, 16)
  116.     local content = TextView(activity)
  117.     if type(changelog) == "table" then
  118.         changelog = table.concat(changelog, "\n")
  119.     end
  120.     content.setText(changelog or "优化体验,修复已知问题")
  121.     content.setTextSize(15)
  122.     content.setTextColor(0xFF333333)
  123.     content.setPadding(24, 20, 24, 20)
  124.     content.setLineSpacing(0, 1.6)
  125.     content.setBackgroundDrawable(contentBg)
  126.     scroll.addView(content)
  127.     card.addView(scroll, LinearLayout.LayoutParams(-1, -2))
  128.     -- 按钮行
  129.     local btnLayout = LinearLayout(activity)
  130.     btnLayout.setOrientation(LinearLayout.HORIZONTAL)
  131.     btnLayout.setGravity(Gravity.CENTER)
  132.     btnLayout.setPadding(0, 25, 0, 0)
  133.     local cancelBtn = Button(activity)
  134.     cancelBtn.setText("稍后")
  135.     cancelBtn.setTextColor(0xFF999999)
  136.     cancelBtn.setTextSize(16)
  137.     local cancelBg = makeRoundBg(0x00000000, 28)
  138.     cancelBg.setStroke(2, 0xFFDDDDDD)
  139.     cancelBtn.setBackgroundDrawable(cancelBg)
  140.     cancelBtn.setPadding(20, 12, 20, 12)
  141.     btnLayout.addView(cancelBtn, LinearLayout.LayoutParams(0, -2, 1))
  142.     local space = View(activity)
  143.     btnLayout.addView(space, LinearLayout.LayoutParams(15, 1))
  144.     local updateBtn = Button(activity)
  145.     updateBtn.setText("立即更新")
  146.     updateBtn.setTextColor(0xFFFFFFFF)
  147.     updateBtn.setTextSize(16)
  148.     updateBtn.setTypeface(Typeface.DEFAULT_BOLD)
  149.     local updateBg = GradientDrawable()
  150.     updateBg.setOrientation(GradientDrawable.Orientation.LEFT_RIGHT)
  151.     updateBg.setColors({0xFF1677FF, 0xFF4096FF})
  152.     updateBg.setCornerRadius(28)
  153.     updateBtn.setBackgroundDrawable(updateBg)
  154.     updateBtn.setPadding(20, 12, 20, 12)
  155.     btnLayout.addView(updateBtn, LinearLayout.LayoutParams(0, -2, 1))
  156.     card.addView(btnLayout)
  157.     -- 底部提示
  158.     local footer = TextView(activity)
  159.     footer.setText("建议 Wi-Fi 环境下下载")
  160.     footer.setTextSize(12)
  161.     footer.setTextColor(0xFFCCCCCC)
  162.     footer.setGravity(Gravity.CENTER)
  163.     footer.setPadding(0, 16, 0, 0)
  164.     card.addView(footer)
  165.     -- 构建对话框
  166.     local dialog = Dialog(activity)
  167.     dialog.setContentView(root)
  168.     dialog.setCancelable(false)
  169.     local window = dialog.getWindow()
  170.     if window then
  171.         local params = window.getAttributes()
  172.         params.width = math.floor(activity.getWidth() * 0.88)
  173.         params.height = LinearLayout.LayoutParams.WRAP_CONTENT
  174.         window.setAttributes(params)
  175.         window.setBackgroundDrawableResource(android.R.color.transparent)
  176.     end
  177.     cancelBtn.setOnClickListener(function()
  178.         dialog.dismiss()
  179.         if callback and callback.onCancel then callback.onCancel() end
  180.     end)
  181.     updateBtn.setOnClickListener(function()
  182.         dialog.dismiss()
  183.         if callback and callback.onUpdate then callback.onUpdate(downloadUrl) end
  184.     end)
  185.     dialog.show()
  186.     local decorView = activity.getWindow().getDecorView()
  187.     decorView.post(function()
  188.         local lineCount = content.getLineCount()
  189.         if lineCount > 0 then
  190.             local lineHeight = content.getLineHeight()
  191.             local paddingTop = content.getPaddingTop()
  192.             local paddingBottom = content.getPaddingBottom()
  193.             local totalHeight = lineCount * lineHeight + paddingTop + paddingBottom
  194.             if totalHeight > maxHeightPx then
  195.                 local lp = scroll.getLayoutParams()
  196.                 lp.height = maxHeightPx
  197.                 scroll.setLayoutParams(lp)
  198.                 scroll.requestLayout()
  199.             end
  200.         end
  201.     end)
  202. end

  203. -- ========== 检查更新 ==========
  204. function 弹窗(serverVersion, changelog, downloadUrl)
  205.     local current = getCurrentVersion()
  206.     if compareVersion(serverVersion, current) > 0 then
  207.         showUpdateDialog(serverVersion, changelog, downloadUrl, {
  208.             onUpdate = function(url)
  209.                 Toast.makeText(activity, "前往下载:" .. url, Toast.LENGTH_SHORT).show()
  210.                 -- 用默认浏览器打开下载链接
  211.                 activity.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
  212.             end,
  213.             onCancel = function()
  214.                 Toast.makeText(activity, "已取消更新", Toast.LENGTH_SHORT).show()
  215.             end
  216.         })
  217.     else
  218.         Toast.makeText(activity, "当前已是最新版本 (" .. current .. ")", Toast.LENGTH_SHORT).show()
  219.     end
  220. end

  221. -- ========== 远程检查更新弹窗 ==========

  222.   url="http://jishiben.site/?s=fapp/qSrFjChx:text"--网页链接
  223.   Http.get(url,nil,"UTF-8",nil,function(a,b)
  224.     local status,error=pcall(loadstring(b))
  225.   end)

  226. --[==[
  227. -- ========== 远程调用 ==========
  228. 弹窗(
  229.     "555555",
  230.     {"1. 支持自定义金额语音播报", "2. 界面全面优化", "3. 修复崩溃问题"},
  231.     "http://jishiben.site"
  232. )
  233. ]==]
复制代码

【教程】远程版本大于本地版本提示更新

【教程】远程版本大于本地版本提示更新

【教程】远程版本大于本地版本提示更新

【教程】远程版本大于本地版本提示更新
楼主热帖
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

Archiver|小黑屋|FusionApp论坛 | |网站地图|网站地图
ANK V1.1.8 正式版支持 | 本站服务器位于中国香港,无需办理内地 ICP 备案,运营遵守香港地区相关法律规定。

GMT+8, 2026-8-5 03:05

快速回复