判断手机是否重启过

2023-12-25

我正在尝试检测自上次设置首选项值以来 Android 设备是否已重新启动。理想情况下,我想在没有android.permission.RECEIVE_BOOT_COMPLETED允许。

我考虑的一种方法是存储另一个包含某种会话 ID 的首选项值。当我更新相关首选项值时,我也会更新会话值。当我检查会话值首选项中的值时,如果它等于当前会话值,则尚未重新启动。如果当前会话值与保存的值不同,则表示已重新启动。不幸的是,我已经在文档中挖掘了相当长一段时间,试图找到会话值,但我找不到任何东西。

我需要两件事中的一件事的帮助。如果您可以提供我在哪里可以找到类似于会话 ID 或启动 ID 的值,那么我将使用我的算法。或者,我愿意接受另一种算法来解决问题。太感谢了!


这太老了,但我认为我有一个很好的解决方案,不需要运行任何服务或任何特殊的后台进程。

只需将时间保存到持久内存中,例如共享首选项。这可以在您需要的任何参考时间执行。对我来说,这是在启动计时器时,这样即使在重新启动后它也能持续存在。天文计时器仅与 SystemClock.elapsedRealtime() 相关,这是自上次启动以来的时间,因此您不能使用 System.currentTimeMillis(),它是自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来的总时间)。

如果您想检查手机是否仅在应用程序启动时重新启动,请将其添加到您的 onCreate.

    //Create a SharedPreferences
    SharedPreferences savedKeys = getApplicationContext().getSharedPreferences("MyPref", 0);
    SharedPreferences.Editor editor = savedKeys.edit();
    
    if (((System.currentTimeMillis() - SystemClock.elapsedRealtime())-(savedKeys.getLong("key_oldDelta", 0)))>100) {
    
    //Run code here or set a boolean to true for system reboot.
    
    }
    
    //Save the new values.
    
    editor.putLong("key_oldDelta", (System.currentTimeMillis() - SystemClock.elapsedRealtime()));
    editor.commit();

以下部分代码将获取自上次启动以来当前 Unix 时间和系统时间的 delta(差值): (System.currentTimeMillis() - SystemClock.elapsedRealtime())

如果系统重新启动,这些数字将分别比重新启动前更大和更小。

示例:您在系统时间 = 100 和 Unix 时间 = 1000 处保存时间。您在 450 后重新启动,并在另一个 50 后重新启动应用程序。自您记录值以来,现在已经过去了 500。他们现在分别是 10 岁和 1500 岁。

新增量:1500-10=1490

旧三角洲:1000-100=900

三角洲的三角洲:1490-900=590

重新启动后,最后一个数字始终会更高。重启后已经过了多久并不重要。这种差异只会变得更大,因为一个数字(Unix 时间)不断向前移动,而另一个数字在重新启动时不断重置为零。我的示例使用非常小的数字来使其易于理解,但请记住实际数字以毫秒为单位,并且自 1970 年以来已经过去了相当多的数字。这就是为什么我的代码在 if 语句末尾显示

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

判断手机是否重启过 的相关文章

  • Android Camera.takePicture() 有时不返回?

    我正在编写一个Android 拍照应用程序 该代码在 onPreviewFrame byte data Cameracamera 中从预览中获取帧后进行一些处理 问题在于 android hardware Camera 的函数 takePi
  • 如何在不使用 Firebase 控制台的情况下发送 Firebase 云消息通知?

    我从新的 Google 通知服务开始 Firebase Cloud Messaging 感谢这段代码https github com firebase quickstart android tree master messaging htt
  • 当我单击“完成”键时,Android OnEditorActionListener() actionId 给出 0

    我创建了一个键盘 当用户输入数字时 它会输入特定的 EditText 但是当用户单击Done关键 它没有去setOnEditorActionListener但它关闭了键盘 这是我的代码 final EditText txtQty new E
  • 自动删除 Firebase 通知

    我有一个问题 我都读过让通知在 5 分钟后消失 https stackoverflow com questions 15648699 make notification disappear after 5 minutes and 几秒钟后清
  • 如何清除Android剪贴板?

    我发现的方法都不起作用 这是我尝试过的 1 使用clearPrimaryClip 的方法ClipboardManager class ClipboardManager clipboard ClipboardManager getSystem
  • Android 和 Google 地图内部片段以及其他控件和 viewpager

    我是android编程新手 我有一个带有 3 个页面 片段 的小应用程序 使用 pageradapter 和 viewpager 在它们之间滑动 其中一个页面包含复选框 和其他控件 和地图 我的问题是程序在启动时崩溃 Fragment co
  • Toast 消息消失后​​完成活动吗?

    有谁知道 是否有可能对 Toast 消息执行某些操作 在我的情况下完成活动 将被关闭 您只需创建一个Thread持续时间只要Toast显示 然后您就可以完成您的Activity public void onCreate Bundle sav
  • 如何在android中的谷歌地图上聚焦标记

    我只是想知道我们是否可以关注 Android 应用程序中添加的标记 如果是 怎么办 或者有没有其他方法可以完成这项任务 可以说我使用下面的代码添加了一个标记 map addMarker new MarkerOptions title tit
  • Jetpack Compose:制作全屏(绝对定位)组件

    我怎样才能在全屏渲染树的深处制作一个可组合的 类似于Dialog可组合作品 例如 当用户单击图像时 它会显示该图像的全屏预览 而无需更改当前路线 我可以用 CSS 来做到这一点position absolute or position fi
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • 我在 android studio 中使用 kotlin 时出现错误

    为什么会出现这个错误 09 12 16 36 31 502 1886 1886 com getloction nourmedhat smartgate getlocation E AndroidRuntime 致命异常 main 进程 co
  • Android 中 Activity 之间的 3D 动画

    How to create animation between two Activity look like As Screen shot in android 搜索jazzyviewpager 这是link https github co
  • 使 Recyclerview 固定高度并可滚动

    已解决以下检查答案 所以我试图为我的 Android 应用程序创建评论功能 我想在 recyclerview 中显示评论 然后在 recyclerview 下方有一个按钮和文本视图来添加评论 我想让 recyclerview 具有一定的高度
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • onPrepareOptionsMenu 复制 ActionBar 中的项目

    当我使用 onPrepareOptionsMenu 添加菜单项时 该菜单项会在操作栏中复制其自身 我正在使用片段并在主要活动的 ActionBar 中创建初始菜单 如下所示 Override public boolean onCreateO
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • 调试android数据绑定?

    谁能告诉我如何调试或找到数据绑定生成的代码 从this https www youtube com watch v NBbeQMOcnZ0链接我发现它生成了所需的代码 我猜您正在寻找自动生成的绑定 java 文件 我也在寻找他们 最后我在这
  • Android 从通知刷新 Activity

    我有一个程序 我在其中调用通知 如果您将其下拉 该通知将启动一个新活动 mNotificationManager NotificationManager getSystemService ns int icon R drawable sta
  • 动态更改按钮上的图像视图

    在我的应用程序中 我有按钮和ImageView 当我按下按钮时我想改变ImageView 我的可绘制文件夹中有 5 张图像 按下按钮时 ImageView 根据按钮单击一张一张地更改图像 我想要它的解决方案 感谢任何可以提供帮助的人 维护一
  • 如何用LoaderManager自动重新查询

    我有一个应用程序显示来自 SQLite DB 的数据 并且数据不断变化 所以显然 我认为我应该使用 LoaderManager 来显示数据 我读过一些关于将 LoaderManager 与 SQLite 结合使用的内容 然后看到了亚历克斯

随机推荐

  • 在宏中使用“else”

    我看过下面的代码 define QL REQUIRE condition message if condition std ostringstream ql msg stream ql msg stream lt lt message th
  • 如何以编程方式指定replyUrlsWithType

    我想设置replyUrlsWithType以编程方式在应用程序上manifest https learn microsoft com en us azure active directory develop reference app ma
  • Eclipse 在调试 java 时跳过断点

    我使用 Eclipse 已经很多年了 并且一直使用调试器 但最近我知道它可以在调试时跳过断点 我什至已经在 println 上设置了一个断点 我会看到文本出来 但不会到达断点 另外 有时我会在代码的一个区域一致地遇到断点 但在其他区域却不会
  • default(Type) 的编程等效项

    我正在使用反射来循环Type的属性并将某些类型设置为其默认值 现在 我可以切换类型并设置default Type 明确地 但我宁愿在一行中完成 是否存在与默认值等效的编程方式 如果是值类型使用激活器 CreateInstance http
  • SET NOCOUNT ON 使用情况

    灵感来自这个问题 https stackoverflow com questions 1483383 is this stored procedure thread safe or whatever the equiv is on sql
  • 如果数据包含撇号,如何插入?

    实际上 我的任务是使用 C 将 csv 文件加载到 sql server 中 所以我用逗号将其拆分 我的问题是某些字段的数据包含撇号 并且我正在触发插入查询以将数据加载到 sql 中 所以它给出了我的编码错误 using System us
  • 如何按列对文本文件进行排序并保持原始顺序

    我有一个非常大的数据文件 有 15 列 我需要根据特定列 例如第 11 列 对所有行进行排序 我在 Linux 中使用以下命令 sort k11 d myfile txt gt sortedfile 问题是排序命令不保留文件的原始顺序 例如
  • FILTER_VALIDATE 与 Preg_match。使用哪一个?

    要验证输入日期 无论是表单 URL 还是表单 您通常使用哪种技术 我一直在看PHP 过滤器 http www w3schools com php php ref filter asp但我很少在任何代码上看到它们 我平时见过preg mach
  • PHP大量内存用于SQL查询

    我在优化 Apache PHP 内存使用时偶然发现了一个奇怪的问题 基本上 当尝试绑定 MySQLi 查询的结果时 代码会崩溃 并显示错误消息 致命错误 允许的内存大小 16777216 字节耗尽 试图分配 50331646 字节 相关表格
  • 我什么时候可以激活/停用布局约束?

    我在 IB 中设置了多组约束 并且我想根据某些状态以编程方式在它们之间切换 有一个constraintsA所有出口集合均标记为从 IB 安装 并且constraintsB出口集合全部在IB中卸载 我可以通过编程方式在两组之间切换 如下所示
  • Spring Boot 中用于模块化应用程序的插件系统

    我在编译后寻找在 Spring Boot 中动态加载 jar 例如 我将 jar 放在某个文件夹中 当 Spring Boot 启动时 该文件夹中的所有 jar 将被注入到 Spring Boot 应用程序中 我不知道如何使用 Spring
  • 从powershell执行msbuild任务

    我正在关注这个博客 http sedodream com 2010 04 26 ConfigTransformationsOutsideOfWebAppBuilds aspx http sedodream com 2010 04 26 Co
  • Microsoft onedrive:无需登录即可使用 API 密钥创建文件夹

    我可以使用以下命令在 onedrive 中创建文件夹和文件Graph API 但是第一次我必须登录微软帐户 以下是我需要登录的链接 https login microsoftonline com common oauth2 v2 0 aut
  • Angular 2 (keydown.enter) 无法阻止Default()

    the event preventDefault 我使用时不起作用 keydown enter 在模板中 这是演示 https plnkr co edit GZrVt7l6BEO2uHfWFoTQ p preview https plnkr
  • Spring-data-cassandra 1.3.4 与 Cassandra 3.x 不兼容

    我尝试使用 Spring data cassandra 1 3 4 以及最新的 cassandra driver core 3 0 0 在 Cassandra 2 1 12 作为 DSE 4 8 4 的一部分 上 一切正常 因为相同的 sp
  • React 是否保证“props”对象引用保持稳定?

    最近我看到类似于以下人为示例的代码 const MyComp props gt const prevProps setPrevProps useState props if props prevProps setPrevProps prop
  • 编写一个监听 USB 端口的小实用工具,需要建议

    我有一个可以循环工作的硬件 它配备了专有的软件工具 让用户可以通过 USB 从 PC 控制它 用户定义每个周期的长度 在每个周期开始时 软件工具通过 USB 快速向硬件发出一系列命令 然后进入空闲模式 等待下一个周期 还有第二个硬件需要与第
  • 通过静态类访问 HttpContext 可以“正确”处理不同的请求

    I found 本文 https www quickdevnotes com better approach to use httpcontext outside a controller in net core 2 1 在尝试解决需要非控
  • 图片上传:iPhone客户端-Django-S3

    我有一个关于从客户端 在本例中为 iPhone 应用程序 上传到 S3 的一般性问题 我正在使用 Django 在 EC2 实例上编写 Web 服务 以下方法是将文件上传到 S3 的最低限度方法 对于较小的文件 jpg 或 png def
  • 判断手机是否重启过

    我正在尝试检测自上次设置首选项值以来 Android 设备是否已重新启动 理想情况下 我想在没有android permission RECEIVE BOOT COMPLETED允许 我考虑的一种方法是存储另一个包含某种会话 ID 的首选项