如今,大家每天都有大量时间花在手机上,但是,大家有没有想过自己的时间都花在哪些App上了呢?相信很多人都有这样的需求,不过iOS系统本身并不能显示每个App的运行时间和次数,因此,本人写了这样一个小工具,可以在后台进行监控当前使用的App,对App的打开次数和运行时间进行统计,可以显示今日、本周、或全部统计结果,并能按打开次数、运行时长排序。

程序使用的是私有API,因此请勿将本文中提到的方法用于需要发布到AppStore的应用。不过在真机上运行代码,并不需要越狱,只需要有开发者证书即可,因此有证书的朋友可以部署代码到设备上娱乐下。

程序原理很简单,首先是播放无声音乐,使程序能保持后台运行,其次启动一个计时器,持续获取当前前台运行的App名称,当前台运行的App发生改变时,即写一条记录到数据库,然后监控设备的锁屏消息,当设备锁屏时,暂停计时器,当设备打开锁屏时,继续计时器。如果设备重启,需要重新打开一次程序,统计才能继续进行。

运行效果如下:

        

程序的要点如下:

(1)播放无声音乐

使用开源代码MMPDeepSleepPreventer

(2)获取前台运行App bundleId及App名称

获取前台运行的App Bundle Id:SBFrontmostApplicationDisplayIdentifier

获取App 名称 :SBSCopyLocalizedApplicationNameForDisplayIdentifier

获取App图标:SBSCopyIconImagePNGDataForDisplayIdentifier

具体使用方法参见《iphone SprintBoard部分私有API总结》 及 代码。

(3)监控设备锁屏消息

使用CFNotificationCenterAddObserver对"com.apple.springboard.lockcomplete"和"com.apple.springboard.lockstate"进行监控。根据得到的状态,可以知道设备是锁屏还是打开非锁屏。

代码下载:https://github.com/gugupluto/iOSAppTime

最新文章

  1. Java-jdbc操作数据库
  2. SQL 同时查看2个表
  3. ant 的详细的入门教程
  4. struts之动态方法调用改变表单action属性
  5. JS 关于(function( window, undefined ) {})(window)写法的理解
  6. [LintCode] Sort Integers 整数排序
  7. (转)创建Graphics的三种方法
  8. iPad 2升级iOS 9的过程记录
  9. JSON.stringify 函数 (JavaScript)
  10. SOA服务开发小计
  11. SaltStack Syndic配置
  12. 使用POI把Word Excel转为HTML
  13. c语言输入一个字符串,统计其字母,数字和其他字符的个数,并以柱状图输出
  14. 【BZOJ1975】【SDOI2010】魔法猪学院(搜索,A*,贪心)
  15. ASP.NET MVC - Entity Framework
  16. 动态改变Spring定时任务执行频率
  17. 4.3Python数据处理篇之Matplotlib系列(三)---plt.plot()折线图
  18. Sed+Grep 快速替换查找字段(批量替换字符串)
  19. linux内核分析ELF文件分析实践报告
  20. FAQ:如何提高编译速度?

热门文章

  1. Spring cloud微服务安全实战-6-8sentinel限流实战
  2. haproxy高可用、负载均衡集群
  3. python中多层循环的一键退出
  4. [ kvm ] 学习笔记 3:KVM 基础功能详解
  5. Framework7 介绍
  6. ubuntu18.10 安装nodejs
  7. 解决idea中maven项目无法读取src/main/java目录下面的配置文件问题
  8. Linux 实现回收站功能脚本
  9. Python27之集合
  10. Python04之数据类型