Skip to content

一款能够让你在专注工作时不受手机干扰的软件

Notifications You must be signed in to change notification settings

littlejlf/FocusClock

Repository files navigation

FocusClock

一款能够让你在专注工作时不受手机干扰的软件。

功能包括:

  • 用户可通过seekBar滑动来选择专注时长(120分钟以内),随后开始计时,在计时期间,只允许访问本app,当用户访问其他app将被强制拉回。

  • 可选择打开关闭环境音(雨声),计时时环境音自动打开。当用户在计时时选择放弃,将弹出弹窗警告和警告提示音。

  • 保存用户的专注时长至数据库中。

  • 可通过back键返回而不会导致计时中断(Actiivty销毁),计时期间允许访问本app其他activity而音乐和计时功能正常进行。

    add image

开发环境:Android Studio

部分效果展示

add image

部署运行

  • 可通过APK下载链接进行下载

链接:https://pan.baidu.com/s/1JrN4BDu7F5YR-yulFwQdRg 提取码:lbq2

  • 也可通过下载源码在Android Studio中使用虚拟机运行
$git clone [email protected]:cloudmusiccc/FocusClock.git

确定build.gradle文件添加了依赖项

implementation 'org.litepal.android:core:1.4.1'

确定manifest文件添加了用户权限

  <uses-permission
        android:name="android.permission.PACKAGE_USAGE_STATS"
        tools:ignore="ProtectedPermissions" />

注意在本app所在的activity设置启动模式为singleTask

  android:launchMode="singleTask"

注意事项

  • Android 10 为了减少app对于用户不必要的影响,对用户权限作了更为严格的限制,对于app从后台启动activity进行了更高级别的限制,因此本项目通过Service启动Activity的功能在Android 10版本下失效。
  • Android 9 及以下环境功能正常运行
  • Android 10 环境下专注时钟强制将用户拉回功能失效,代之以弹窗提醒

add image

**有关文档如下:**https://developer.android.com/guide/components/activities/background-starts

设计流程:

add image

各方法介绍:

MainActivity
函数名 功能简介
bindViews 通过seekBar的触发事件动态显示用户选取的时长
upDataStudyTime 计算当前用户的专注时长,并显示在textView中
isAccessGranted 判断当前用户是否开启了该app所需权限ACTION_USAGE_ACCESS_SETTINGS,若未开启,则跳转至权限开启页面
startMusicService 开启服务:MusicService,环境音(雨声)开始播放
stopMusicService 关闭服务:MusicService,环境音(雨声)停止播放
startAlarmMusicService 开启服务:AlarmMusicService,警告音播放
stopAlarmMusicService 关闭服务:AlarmMusicService,警告音关闭
showQuitEvent 显示退出弹窗警告
startMyService 开启服务:MyService,监视用户是否打开了其他app,若有,将被强制拉回
stopMyService 关闭服务:MyService
IsMyserviceRunning 判断MusicService是否运行,与播放音乐有关
updateCountDownText 计算当前剩余分钟和剩余秒,并显示在textView
startTimer 开始计时,建立一个倒计时器线程,以每秒为一个间隔进行计时,并每秒调用updateCountDownText刷新当前剩余时间界面,计时结束需更新数据库,更新页面显示
pauseTimer 停止计时,调用cancel()方法销毁计时器线程,更新页面显示
testActivity
当用户打开其他app,将被强制拉回,但经过多次实验发现无法拉回TimeMasterActivity,故创建一个testActivity作为中间跳转。用户将被强制拉回此活动,onCreate方法执行时会发出弹窗,“上课期间禁止玩手机”,用户只能点击确定,随后进入TimeMasterActivity
MyService
task 建立一个任务,获取系统当前时间time,并查询time之前10秒到time这段时间最新使用的应用,并作为topPackageName打印至控制台。随后判断topPackageName是否为DeepClass所在包名,若不是,则强制拉回
onStartCommand 建立一个定时器timer,每隔1秒执行一次任务task
onDestory 销毁任务,销毁定时器线程
MusicService
建立控件MediaPlayer播放环境音(雨声),设置循环播放:true
AlarmMusicService
建立控件MediaPlayer播放放弃警告音,设置循环播放:false
-------------------------------------------------------该项目仅用于学习---------------------------------------------------------------------------

About

一款能够让你在专注工作时不受手机干扰的软件

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages