用 flutter 做了一个听书软件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiguadong
V2EX    Android

用 flutter 做了一个听书软件

  •  
  •   xiguadong 2023-11-09 10:39:06 +08:00 13324 次点击
    这是一个创建于 757 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用户直接从后台拉到前台 然后杀死 app 会导致播放进度丢失 有什么好方法呢 不想定时任务保存记录

    27 条回复    2023-11-10 14:22:25 +08:00
    iOCZS
        1
    iOCZS  
       2023-11-09 10:53:39 +08:00
    定时保存,实时保存,APP 退出回调保存,播放 widget deinit 保存
    xiguadong
        2
    xiguadong  
    OP
       2023-11-09 10:55:31 +08:00
    @iOCZS 只能这样吗 定时存感觉太 lou 了
    iOCZS
        3
    iOCZS  
       2023-11-09 11:01:05 +08:00
    @leetomlee123 那你就想错了,最简单直接的才是最健壮的。机器就适合做这种高频率的工作。你想啊,你音频播放,肯定有进度在实时刷新吧,有时候是个进度条啥的,那你刷新的时候赶紧同步不就好了。有时候你只是封面图转一下,但是播放进度其实还是有回调或者你可以定时去获取一下。
    xiguadong
        4
    xiguadong  
    OP
       2023-11-09 11:04:43 +08:00
    @iOCZS 安卓就不能捕获后台拉到前台这个状态吗 只保存一次才优雅 强迫症的我接受不了
    Oneup
        5
    Oneup  
       2023-11-09 11:05:13 +08:00
    @iOCZS 赞同
    sentinelK
        6
    sentinelK  
       2023-11-09 11:07:02 +08:00
    @leetomlee123 "安卓就不能捕获后台拉到前台这个状态吗"

    flutter 不清楚,但是 Android 本身是可以的,对应的是生命周期中的 onResume 事件。
    xiguadong
        7
    xiguadong  
    OP
       2023-11-09 11:08:38 +08:00
    @sentinelK 我的意思是后台拉到任务栏 而不是直接回到前台 触发不了 onresume
    AlanStar
        8
    AlanStar  
       2023-11-09 11:13:02 +08:00
    Android 原生的 Activity 生命周期有 onPause()和 onResume(),flutter 可以通过 WidgetsBindingObserver 检测到前后台切换状态(后半段是查到的)。
    关于播放进度,可以考虑这几个方案
    1.用生命周期的方式来控制,比如 Activity 获得焦点和失去焦点时各就执行一次播放进度记录,这样就不会显得那么刻意。
    2.提示用户关闭 APP 电量管理限制以使用类似 service 的机制监听用户的行为变化从而做记录。
    后者可能会让人比较反感,不太建议
    AoEiuV020JP
        9
    AoEiuV020JP  
       2023-11-09 11:34:49 +08:00
    软件开源不?有些兴趣,
    听书是本地用户自行导入的书还是有提供资源?
    daniel11
        10
    daniel11  
       2023-11-09 11:59:46 +08:00
    我最近也是有个想法,也想问题是自用呀还是会发布,如果发布的话书的资源如何处理的,书的版权怎么处理
    xiguadong
        11
    xiguadong  
    OP
       2023-11-09 13:14:36 +08:00
    @AoEiuV020JP http://116.204.64.93:5244/d/v1/tsl.apk
    xiguadong
        12
    xiguadong  
    OP
       2023-11-09 13:15:03 +08:00
    @daniel11 解析别人网站的
    xiguadong
        13
    xiguadong  
    OP
       2023-11-09 13:15:30 +08:00
    @AlanStar 不知道有没有 flutter 插件支持 不懂原生
    jifengg
        14
    jifengg  
       2023-11-09 13:19:43 +08:00
    前段时间也做了一个听故事的 flutter 项目,用的是 audioplayers 包,它有 onPositionChanged 可以监听进度变化。你可以在里面加个判断,距离上一次保存多少秒了就再保存一次。
    xiguadong
        15
    xiguadong  
    OP
       2023-11-09 13:23:09 +08:00
    @jifengg 不喜欢这种
    daotiangeng
        16
    daotiangeng  
       2023-11-09 13:31:03 +08:00
    @leetomlee123 下不了,提示病毒
    xiguadong
        17
    xiguadong  
    OP
       2023-11-09 13:38:54 +08:00
    xiguadong
        18
    xiguadong  
    OP
       2023-11-09 13:38:54 +08:00
    kosmosr
        19
    kosmosr  
       2023-11-09 13:45:41 +08:00 via iPhone
    不如问问 gpt ,我写 flutter 很多代码都是请教 gpt 写的
    xiguadong
        20
    xiguadong  
    OP
       2023-11-09 14:06:05 +08:00
    @kosmosr 不知道如何描述
    lin7946
        21
    lin7946  
       2023-11-09 15:09:35 +08:00   4
    看完下来就看到 OP 不想/不喜欢/不知道/6 .....
    yyyyhere
        22
    yyyyhere  
       2023-11-09 17:28:22 +08:00
    重写 didChangeAppLifecycleState 方法
    K2
        23
    K2  
    PRO
       2023-11-10 08:04:07 +08:00
    最近在用这个作者的听书 app ,也有 android 版本。好处是可以直接导入 epub 或 txt ,然后用微软语音朗读,能实时保存进度,还支持音译后离线播放。
    K2
        24
    K2  
    PRO
       2023-11-10 08:04:57 +08:00
    ltq918
        25
    ltq918  
       2023-11-10 10:05:20 +08:00 via Android
    Android 中似乎有一个 onTaskRemoved()
    xunqin
        26
    xunqin  
       2023-11-10 10:37:01 +08:00
    @K2 感谢
    xiguadong
        27
    xiguadong  
    OP
       2023-11-10 14:22:25 +08:00
    @ltq918 ok 研究下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5082 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 08:46 PVG 16:46 LAX 00:46 JFK 03:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86