初中生
 
- 金币
- 957
- 好评
- 2
- 信誉
- 100
|
本帖最后由 SuperMaker 于 2026-1-9 16:51 编辑
个人开发的论坛app,分享给大家,根据评论把源码也放上,就不设置帖子权限了,网盘衔接也是可以直接下,希望下载给个回帖。关于自动化功能我就不加了,开发过程如下:
1. 项目概述
本项目旨在将 BinMT 论坛(https://bbs.binmt.cc/) 封装为一款体验流畅的 Android 原生应用 (APK)。不仅仅是简单的网页加载,更通过原生代码与 Web 前端的深度交互,解决了文件上传下载、沉浸式状态栏同步以及符合用户直觉的导航逻辑等痛点。
2. 核心技术架构
2.1 基础容器 (Base Container)
应用采用 单 Activity (Single Activity)架构,核心载体为 `WebView`。
- 语言: Kotlin
- 最低兼容版本: Android API 24 (7.0) +
- 权限管理: 动态请求存储权限 (针对 Android 9及以下),适配 Scoped Storage (Android 10+)。
2.2 关键功能实现原理
A. 智能导航系统 (Smart Navigation)
这是提升用户体验的关键一环。原本的 WebView 在按下返回键时会直接关闭 Activity,为了模拟原生 App 体验,我们实现了双层导航逻辑:
1. 拦截系统返回事件: 使用 `OnBackPressedDispatcher` API(替代过时的 `onBackPressed`)。
2. 层级判断:
- 第一层 (Web 历史): 检查 `webView.canGoBack()`。如果有网页浏览历史,则执行网页回退 (`webView.goBack()`)。
- 第二层 (App 出口): 如果处于 WebView 首页,则进入“防误触退出”流程。
- 记录并对比上次按键时间戳。
- 间隔 > 2秒:Toast 提示 "再按一次退出应用"。
- 间隔 < 2秒:执行 `finish()` 关闭应用。
B. 沉浸式 UI 同步 (Dynamic UI Sync)
为了消除“网页感”,App 能够根据网页内容动态改变 Android 系统状态栏颜色。
- 原理: `WebView` -> `JavaScript 注入` -> `Android Interface`。
- 流程:
1. `onPageFinished` 时注入 JS 脚本。
2. JS 脚本定时提取网页 Head 区域 (`.comiis_head`) 的背景色。
3. 通过 `@JavascriptInterface` 将颜色值回传给 Android 原生层。
4. 原生层解析颜色并在 UI 线程更新 `window.statusBarColor`,同时根据亮度自动调整状态栏图标(深色/浅色)。
C. 文件系统深度集成
- **文件上传**:
- 重写 `WebChromeClient.onShowFileChooser`。
- 创建原生 `Intent` 调起系统文件选择器。
- 使用 `ActivityResultLauncher` 接收结果并通过 `ValueCallback` 传回 WebView。
- 文件下载:
- 实现 `DownloadListener`。
- 桥接系统 `DownloadManager` 服务,将下载任务加入系统下载队列,并在通知栏显示进度。
D. 链接处理策略
- 站内链接: 拦截并强制在当前 WebView 打开,防止跳出到外部浏览器。
- 站外/特殊链接**: 尝试通过 `Intent` 调起系统默认浏览器或其他对应 App (如支付宝、百度网盘等 Schemes)。
3. 代码结构亮点
清晰的职能分离
代码没有全部堆砌在 `onCreate` 中,而是拆分为独立的模块化方法:
- `setupWebView()`: 集中处理 WebSettings、Cookie、UserAgent 配置。
- `setupBackPress()`: 独立的导航逻辑封装。
- `WebAppInterface`: 独立的内部类处理 JS 交互。
- `handleDownload()`: 独立的下载处理逻辑。
兼容性处理
- 文件权限: 针对 Android 10 (Q) 以前的版本动态申请 `WRITE_EXTERNAL_STORAGE`。
- 安全配置: 启用 `MixedContentMode` 允许 HTTPS 页面加载必要的 HTTP 资源(如图片)。
该项目成功将一个 Web 论坛转化为功能完备的 Android 客户端工具。
程序链接:https://www.123865.com/s/N0iA-A3Lqh?pwd=SPGS# 提取码:SPGS
源码链接:https://www.123865.com/s/N0iA-93Lqh?pwd=9JMs# 提取码:9JMs
补充内容 (2026-1-11 10:40):
更新了v1.1版本,改不了原贴,只能另开贴,看个人空间。 |
-
查看全部评分
总评分:好评 +2
金币 +2
|