跨应用全屏答题遮罩
基于 TYPE_APPLICATION_OVERLAY 的全屏窗口,切到视频 App 或桌面后照样弹出;遥控器方向键、确定键、数字键 1-4 由遮罩自主路由,不依赖窗口 View 焦点。
Android TV · 家长守护 · 完全离线
答对题目,无限续租!
装在电视上的反沉迷小实验:开启守护后,前台服务会按设定周期在任意应用之上弹出全屏答题页,答对才能继续看电视;同一题答错 2 次自动换题并记入错题库。这是一台 Android TV 上的「答题解锁继续观看」家长守护工具。
PoHW 是 Proof of Work 的一个玩笑 —— 看电视的通行权不靠算力,而是靠周期性交一次「作业量证明」来续租。租约到期,重新出题。本项目是个人非商业的 Android TV 实验,只发布 APK,不上架任何应用商店。
示意图:电视 + 琥珀计时弧 + 青绿对勾
深蓝渐变圆角底 + 琥珀计时弧 + 屏幕里的青绿对勾 + 底座,呼应「答对题目,无限续租!」。图标与 TV 横幅均由仓库脚本可复现生成。
从全屏答题遮罩到离线题库与家长设置,全部围绕一件事:让孩子在继续观看前,先交一次「作业」。
基于 TYPE_APPLICATION_OVERLAY 的全屏窗口,切到视频 App 或桌面后照样弹出;遥控器方向键、确定键、数字键 1-4 由遮罩自主路由,不依赖窗口 View 焦点。
答对才能继续看电视,租约到期重新出题。守护开关合并为一个按钮,运行中显示「关闭守护」,关闭也必须先通过家长密码就地验证。
PoW 续租同一题累计答错 2 次自动原地换题,原题按题面去重记入本地错题库;控制台可翻页查看、删除、清空,并标出正确答案与选错项。
本地 SQLite内置 SQLite,覆盖 4,319 个知识点、19 个学科、21 个年级段,本地随机抽题。完全离线、零联网,默认一次网络请求都不发;在线题库源默认关闭,需家长自行填地址才启用。
完全离线 · 零联网数学 / 语文 / 英语 / 其他学科四槽权重,默认 5:3:2:2(每槽 0-5 可调)。「全学科」模式下第 4 槽生效,其他学科池不可用时自动失效,避免串科抽题。
四槽权重4-8 位数字密码,PBKDF2(60,000 次迭代)+ 随机 salt,关闭守护也需要验证且服务侧二次校验。设置页为居中窄栏单列卡片流,遥控器上下按行移动,不再跨栏跳转。
PBKDF2 · 单列卡片弹题时申请短暂音频焦点并派发媒体暂停键,答对解锁后归还焦点并尝试恢复播放。这是 best-effort:Android 没有强制暂停第三方播放器的公开 API,不保证所有视频 App 响应。
best-effort「启动即守护」默认开:APP 冷启动且条件满足时自动拉起守护,从后台返回不会把家长手动关掉的守护又打开。「开机自启」默认关,需家长显式开启并手动放行厂商自启动权限。
LaunchPolicy全屏展示两张静态收款码,遥控器左右键切换渠道,返回键退出。纯静态收款码、无支付 SDK、无订单、无网络请求,APP 不接触金额与账号,扫码与付款都在家长手机上完成。
纯静态 · 不联网支付方案 B:新增「学习学期」与「已学单元」,按内置 12 册数学有序单元表限制出题范围,贴合开学初只学 1-2 个单元的实际进度;选不到题时依次放宽单元 → 学期 → 年级,始终不换学科。语文 / 英语与初中暂无可靠单元顺序,仅按学期过滤。
学期 + 单元侧载到小米电视等 Android TV 设备,授权一次悬浮窗,配置好家长密码与出题参数,即可开启守护。
把 APK 装到 Android TV 设备(文件管理器安装,或 adb 覆盖安装)。本项目不上架任何应用商店、仅自行侧载,只发布 APK。
adb install -r <你下载的 APK>
点「授权悬浮窗」打开系统开关并允许。SYSTEM_ALERT_WINDOW 是必需权限,用于在其他应用上层弹出全屏答题页。
首次进入会要求初始化 4-8 位数字家长密码;密码以 PBKDF2 + 随机 salt 落盘,用于保护设置页与关闭守护。
可选小学 1-6 / 初中 1-3(内部 1-9 年级)、出题频率(15 秒至 30 分钟)、数 / 语 / 英配比与「全学科」开关,以及按学期与单元的进度范围。
点「开启守护」后按 Home 切到任意视频 App,到点会弹出全屏答题页。答对继续观看,租约到期重新出题。
minSdk 21,targetSdk 33);电视、手机、平板均可安装,不强制 Leanback。adb shell pm clear com.jager.tvquiz 重置(会清空全部设置与统计);遮罩卡住卸载流程可用 adb shell am force-stop com.jager.tvquiz。最新版本 v1.0.1(当前构建 versionCode 19);签名证书连续(76eb6063…6172),可直接 adb install -r 覆盖安装。APK 附件以 Releases 页面实际发布为准,本页不写死任何直链资产文件名。
本项目不上架任何应用商店,仅发布 APK 供自行侧载;请从仓库 Releases 页面获取,不要使用第三方镜像。
按时间倒序整理自仓库 CHANGELOG.md。v1.0.0 之前为开发期内部迭代编号,已下架三个历史 Release;自 v1.0.0 起按 MAJOR.MINOR.PATCH 递增,versionCode 为单调技术计数、不随展示版本重置。具体构建号与改动以仓库 CHANGELOG 为准。
如果这个小工具对你有用,可以请作者喝一杯咖啡。完全自愿,与功能无关。
这里是纯静态收款码,与 APP 内「打赏作者」页一致:不含任何支付 SDK、不创建订单、不发起网络请求、不收集数据,APP 不接触金额与账号。扫码与付款都在家长自己的手机上完成。两张码是从作者提供的海报里裁出的白色卡片,保留了二维码静区与署名。
请把 PoHW 当成一个「自己家里用的玩具项目」,而不是商用家长控制产品。
不一定,是 best-effort。Android 没有「强制暂停第三方播放器」的公开 API,APP 只能请求短暂音频焦点并派发媒体暂停键,答对后归还焦点并尝试恢复;不保证所有视频 App 响应。Android 12+ 视频 App 还可用 HIDE_OVERLAY_WINDOWS 隐藏非系统浮层,各家 ROM 与小米电视的实际表现需要上机实测。窗口焦点重抢同样是 best-effort,重抢失败时遮罩保留、不自动放行,触摸 / 鼠标点击仍可答题。
不是。题目由开源仓库 RedSamerai/learning-content 的知识点纲目参数化生成,偏「知识点辨识 / 定位」,不是教材同步真题,也不是教辅题库。上游只有纲目字段、没有题目选项答案,仓库与 APK 不含任何第三方真题文本或付费题数据。它的作用是打断连续观看、让孩子回忆一下学过什么。
题库本身不含出版社版本字段、不含单元序号,也没有难度标签;分学科教材版本只用于在线题包筛选与题面标注。上下学期可直接用 term 字段过滤。单元进度靠 APP 内置的 assets/syllabus.json 人工维护:目前覆盖小学 1-6 年级数学共 12 册有序单元,把 topic 里的单元名别名归并后按教学顺序排列;语文是课文名、英语是主题词,7-9 年级亦无可靠顺序,这些组合只按学期过滤,不假装精确。设计与边界见 docs/QUESTION_BANK.md。
不收集数据,默认完全离线、零联网:INTERNET 权限仅用于家长自行配置的可选在线题库源,地址为空时 APP 一次请求都不发。打赏只显示静态收款码,无支付 SDK、无订单、无网络请求,扫码与付款都在家长手机上完成。清单同时设置了 allowBackup=false 与默认禁止明文 HTTP。
代码采用 MIT 许可证;上游 learning-content 仓库未附 LICENSE,app/assets/quiz.db 中的纲目数据不在 MIT 授权范围内,仅供个人非商业学习使用。如需公开再分发,请先确认上游授权状态,或换成自己有权使用的数据源自行重建题库。仓库与 APK 中不含任何密钥与付费接口。
这是个人非商业实验,不上架任何应用商店、非应用商店分发,只发布 APK 供自行侧载。第三方应用拦不住 Home 键、系统「强制停止」、卸载与清除数据,本项目明确禁止 Device Admin / Device Owner / 锁屏任务 / 防卸载这类 API。
仅供家庭自用:请在自己设备上、在自己孩子知情的前提下使用。它不是商用家长控制产品,也不承诺任何监护效果;题目质量、真机兼容性与遥控器体验以实际设备为准。
全部文档都在仓库里,以下链接指向 main 分支的对应文件。
能力边界、快速开始、内置题库、家长设置、构建与权限说明。
在 GitHub 打开 → CHANGELOG.md版本口径、各次 versionCode 改动与验证数据的权威来源。
在 GitHub 打开 → docs/QUESTION_BANK.md纲目导入口径、题目生成、校验、许可证边界与学习进度调研。
在 GitHub 打开 → docs/BANK_STATS.md知识点、学科、年级段与题量的分布统计。
在 GitHub 打开 → docs/BUILD.md零 Gradle 命令行构建链、签名与常见报错。
在 GitHub 打开 → docs/ARCHITECTURE.md组件结构、前台服务、悬浮窗与权限说明。
在 GitHub 打开 →