168游戏银商微信第三方开发平台

  我要当学霸这款App有个学习监督的功能,当你启动它的时候,你将无法使用其他App,以此达到帮助人提高自觉性,起到监督学习的效果。最近和同学做了个小App,正好有这个功能,所以就来说说它是怎么实现的。
PS:本篇描述的是我们做这个小App过程中的一些尝试。
首先还是先来看下效果是怎么样的:
  先说下我们这个小App的功能:学习监督的功能(即禁掉其他App的使用) + 桌面小宠物(用来给用户提示的)。
  从上图也可以看出,当启动我们这个小App时,开启监督功能后,再点击其他App(如QQ)的时候,桌面小宠物是会给出一些温馨提示的,然后再把刚才你打开的App关闭掉。
那么它是怎么实现呢?首先我们肯定需要监测到用户打开了什么App,那这点怎么实现呢?
1. getRunningTasks()
  最开始想到的是能否用Activity堆栈,也就是ActivityManager里的一个getRunningTasks()方法,调用这个方法也就可以获取当前正在运行中的任务栈,而处于栈顶的也就是我们在这个时刻打开的App。我们只要不断地读取这个任务栈,也就能达到了监测用户打开App的功能了,完美解决。
  但很遗憾,使用的时候才发现这个方法已经被抛弃了。我们看下源代码里怎么说的:
也就是说在安卓5.0以上的机器,这个方法已经不再为第三方应用使用的了。所以只能另想办法了。
2. getRunningAppProcesses()
  接下去没思路了,就到网上随便搜一些关键词,出来了很多博客,有说用getRunningAppProcesses(),先看下这个方法的介绍:
  返回正在运行中的应用进程集合,然后再通过进程找到对应的包名就可以了。可是返回的集合序列并没有什么特定的排序方式,也就是随机的,那么我们该怎么判断哪个进程才是刚打开的App创建的呢?
  要么可以先指定一些应用程序,只要判断返回的集合里有我们指定的应用程序,那么就可以判断是打开了那个应用。
  要么可以比较上一时刻返回的集合和这一时刻返回的集合,对比看多了哪些进程,少了哪些进程也就可以判断出打开或关闭了某个应用。
  好,实现的思路大概有了,接下去可以敲代码了。当敲完在真机上测试时,发现不管怎么样返回的都只有该应用的信息。
  网上搜了下,发现这个方法权限又被官方弱化了:
  我测试用的真机是5.0.+的安卓系统,网上也有解释说有的手机厂家在5.0版本上就已经弱化了getRunningAppProcesses的权限,难怪只会返回应用本身的信息。可这样一来就又跟第一个思路一样了,这个方法也不能采用了。
3. Linux系统内核会把process进程信息保存在/proc目录下
  上面两种思路都不行,只能再找思路了,后来在stackoverflow中,无意间搜到了国外一牛人的解决方法,他是利用Linux系统的漏洞,Linux系统内核会把process进程信息保存在/proc目录下,只要读取到进程信息,就可以根据进程的属性来判断是否是前台进程了。这个牛人还把它封装成了个开源项目,附上Github地址:。
  这样一来就可以获取到所有的进程信息,但就算拿到所有进程信息又要怎么通过进程判断出用户打开了哪个App呢?
  进程有个属性可以用来区分它是前台进程还是后台进程,关于这两者的区别我不是很理解,但我猜想,是否可以将前台进程类比成正在运行中的进程?如果可以这样,那么再利用第2个思路中提到的方案,就可以实现监测用户打开App的功能了。
  于是,我便去尝试一下。后来真机测试时,发现当打开大多数应用时都可以达到预期的效果。但是有个别应用无论用户打开与否,总能被检测到是处于前台进程中,后来在网上发现有人这么解释:
在聊天类型的App中,常常需要常驻后台来不间断的获取服务器的消息,这就需要我们把Service设置成START_STICKY,kill 后会被重启(等待5秒左右)来保证Service常驻后台。如果Service设置了这个属性,这个App的进程就会被判断是前台,代码上的表现就是appProcess.importance的值永远是 ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND,这样就永远无法判断出到底哪个是前台了。
  于是,这个思路也只能放一边了。
4. 某大神总结
  尝试了各种方法,始终达不到想要的效果。一次偶然情况下,在Github搜到了完美的解决方案,先附上Github地址:。
  你可以看到这个大神,对监测运行中的进程进行了非常详细的讲解,而且列举了目前能实现的各种方法,也分别介绍了各自的优缺点。
  得益于这个大神的分享,我把它的项目clone下来学习,最后选择了方法五:通过Android无障碍功能实现。
  至此,监测用户打开App的功能终于可以实现,有点不足的是每次使用需要用户自己授权,可能会引起用户反感,但想想也是,这种涉及安全性问题的,如果不通过用户自行授权,就好像有点恶意软件的嫌疑了,hhh。
(小小吐槽:早知道有这么个大神给出了这么详细的介绍,我就不用自己花那么多时间去各种尝试了。哭丧脸)
  好了,监测用户打开App的功能解决了,那么剩下的就是实现桌面宠物了。这个挺简单的,也就是悬浮窗,只是在布局文件里换成动图而已,而要实现动图,这里是使用的也是一个开源项目:。
  之后只需要当监测到用户打开App时,发送广播通知我们的App,做出一些相应的动作,比如桌面宠物给出温馨提示、关闭用户打开的App等等。
阅读(...) 评论()  从今年的双十一的销售成绩看,华为、魅族、小米形成了三国鼎立的局...
  在之前的微信教程中,我们分享了删除微信红包发送与领取记录的方法...
还没关注下载之家微信 的亲们赶紧扫一扫左侧的二维码吧!
亲们赶紧扫一扫关注下载之家的微信与我们互动吧!
微信公众号新浪微博
拼音索引:扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
《作业帮》软件好,还是《我要当学霸》软件好?
扫二维码下载作业帮
2亿+学生的选择
看自己想选什么类型?
亲,对我的回答满意的话,就给个好评吧。如果还有不清楚的地方,可以跟我继续交流哦。
我建议安装作业吧!
我要当学霸吧
当然是作业帮
亲,对我的回答满意的话,就给个好评吧。如果还有不清楚的地方,可以跟我继续交流哦。
为您推荐:
扫描下载二维码如何评价类似“我要当学霸”这类软件? - 知乎4被浏览3742分享邀请回答5添加评论分享收藏感谢收起7添加评论分享收藏感谢收起当前【全部】
全部安卓手机安卓平板安卓电视iPhoneiPad其他
当前位置:>我要当学霸类似软件
操作系统:
Android / iOS
应用介绍:
我要当学霸,提高学习效率,改善学习习惯。
我要当学霸类似软件相关应用
Android / iOS
我要当学霸类似软件相关文章
中国好学霸是一款经典怀旧的益智游戏,下面跟小编一起来看看中国好学霸小红花怎么得吧。
方法1:通过分享获得小红花。新版本更新后,玩家可以通过分享至人人网、
我要当学霸是一款具有划时代意义的产品应用,但是现在有一些朋友打开我要当学霸软件后,就不知道在那里退出来了!下面小编就告诉大家我要当学霸的退出登录的方法吧!
我要当学霸删除照片方法。在我要当学霸里面发布了照片,但是过后不想要了?不想要了的话可以删除掉照片,那么要怎么删除照片呢?现在小编就教大家我要当学霸删除照片方法。
我要当学霸设置倒数日方法。还有几个月就要高考了,想给自己一点动力?那就给自己设置一个倒数日吧,看着时间一日一日逼近,赶紧努力学习吧,那么要怎么设置倒数日呢?现在
我要当学霸添加任务方法。想要成为学霸?但是只是看书看资料是不行的哦,每天制定任务每天完成任务,或许会更快提高学习成绩,那么要怎么添加任务呢?现在小编就教大家我要
我要当学霸如何传小纸条给对方。我要当学霸是一款学渣逆袭称学霸的应用,先传个小纸条给好友吧,现在小编就教大家我要当学霸如何发小纸条给对方法。  1)点击打开【我要
第一步 打开我要当学霸进入APP界面,点击学习监督
进入学习监督界面,点击开始
我要当学霸发布话题方法。我要当你学霸是一款具有划时代意义的产品应用,严肃的学习辅助软件,在学习的时候遇到一些奇葩的事情,那么就发布到我要当学霸里面吧,接下来小编
在我要当学霸软件中不仅可以帮助我们学习,还可以提醒我们定时学习,帮助我们养成好习惯。下面网侠小编给大家带来我要当学霸定时学习操作方法:打开我要当学霸APP,点击
我要当学霸一款提高学习的应用软件,遇到不会做的难题在该应用中拍照上传就会有学霸来帮你解决难题,还可以帮助别的用户解决难题,给自己一个当学霸的机会。下面小编给大家
1000万+人气1.1000万+人气2.10万+人气3.100万+人气4.9000万+人气5.9000万+人气6.9000万+人气7.1000万+人气8.9000万+人气9.9000万+人气10.
版权所有 京ICP备号-5
京公网安备 50 备

我要回帖

更多关于 微信第三方开发 的文章

 

随机推荐