我想设计一种离线支付方式,用户只能在支付期间使用该应用程序。我希望即使用户更改手机时间/日期,付款持续时间也是可靠的。
我尝试使用 AlarmManager 定期更新剩余的付款计数器。但是,当用户将日期设置为过去时,这不起作用,我尝试收听 DATE_CHANGE 广播。但当日期设置为过去时,也不会广播。
我想知道实现此类功能的正确方法是什么。非常感谢任何建议。
编辑 1
该应用程序专为没有可靠互联网的地方而设计。所以大多数时候,该应用程序都是离线使用的。因此,我不能假设会有互联网连接来检查正确的时间。
编辑2
最佳答案
要明确的是,在没有互联网接入的情况下,没有明确的方法可以解决您的问题。您唯一能做的就是监视您有权访问的所有时间源并比较它们以检测操纵(定期检查并记录数据)。
这不会导致许可证过期后无法使用该应用程序,但会使其变得更加困难。
首次时间源:设备时钟
您可以定期监控它,例如在服务中使用 CountDownTimer。在您的应用中记录 UTC 时间(不含时区),并确保它只会增加而不会减少。
第二时间源:GPS
参见Sync Android devices via GPS time?
第三次来源:蜂窝网络
据我所知,至少有些蜂窝网络有内部时间。不确定如何以及是否可以在 Android 上访问它。
第四次来源:互联网
如果您检测到有效的互联网连接,请从受信任的时间源获取时间。
关于Android 离线可靠日期持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39308864/