最近需要做一个屏保,开始以为很简单,因为系统本身就带了屏保功能,拿出来改改就好,只是后来发现,系统自带的不是和windows 一样的屏保,系统自带的,要么设置完了马上启动,要不就是插电启动,这样容易捕获事件,直接发起一个activity 播放幻灯片好了。但是我现在需要做的是和windows 一样,一段时间内,用户如果没有响应事件,就会发起activity。
这个问题的关键就是 怎么捕获 没有响应的事件:有人说 监听屏幕变暗,是个办法,但是我还有一个需求就是用户可以设置一个时间段 比如 10 30分钟没想应 就屏保,那么监听屏幕变暗就不好使了。
有人说 监听touch事件,写一个baseactivity 监听所有,activity,虽然是个办法,但是你只能用在你的程序当中,如果我需要在所有的程序当中呢,比如屏保是在home当中,无论任何程序 无触摸才响应屏保。只要解决这两个问题 就简单多了。
那怎么监听 用户没有响应的事件呢?其实很简单,你会发现系统有自带的屏幕设置,可以设置一段时间 让屏幕变暗,方法就是:
try { Settings.System.putInt(getApplicationContext().getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 1000*timeCounter[selectedTimeIndex]*60); } catch (NumberFormatException e) { Log.e("time", "could not persist screen timeout setting", e); }
这里就完成了第一步,设置那一段时间,在用户没有响应的时候屏幕变黑,我们的需求是屏保,变黑啥用?
这只是间接实现屏保的异步分。当屏幕变黑 就需要监听广播 屏幕变黑,发起屏保就好了:
if(action.equals(Intent.ACTION_SCREEN_OFF)){ // if(!CommonUtil.screenSaveAllBitmapList.isEmpty()){ // Log.i("time","screen off"); powerManager=(PowerManager)getSystemService(Context.POWER_SERVICE); WakeLock wl = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "AlarmClock"); wl.acquire(); Intent powerPointintent = new Intent(PageActivity.this,PowerPointActivity.class); startActivity(powerPointintent); wl.release(); }
检查数组为空,是因为屏幕变黑是个系统事件,为了防止每次发起屏保,只要将幻灯片的图片设置为空就好了。
现在就完成了功能,不过不要太高兴,到这里你发现,在一段时间内确实屏保了,但是屏幕依旧是暗的,没有唤醒,当你用手点击屏幕的时候,发现幻灯片已经再播了,也就说,屏保的功能实现了,只是屏幕没亮,
需要在播放幻灯片的activity 下面:
setContentView(R.layout.powerpoint_main); final Window win = getWindow(); win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); // Turn on the screen unless we are being launched from the AlarmAlert // subclass as a result of the screen turning off. if (!getIntent().getBooleanExtra("screen_off", false)) { win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON); }
哈哈 最后别忘了权限
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
原理就是这样,可能不同需求 实现方法不同需要自己修改。因为我的是launcher 所有不需要什么服务一直监听屏幕变暗,如果你享做单独的程序,应该用服务了。所有不要没事总说别人的代码不好用,因为所用的环境不同,对于这样的问题 我也不解答。
相关推荐
Android 屏保的实现 到达特定时间后显示设定的效果
松崎视力增进法十五点纸训练软件,Android源码实现。
程序简单,实现效果好,屏保设置步骤详细
201822090316_手机屏幕保护APP设计与实现.doc
vc实现屏幕保护程序 1、参考文献:用VC制作屏保程序(参考文献).pdf 2、编程提示:用VC制作屏保程序(提示指南).pdf 3、TC中漂亮图形的实现代码文件:BGIDEMO.C
VC 实现屏幕保护程序,相信屏保程序大家都不陌生吧,本程序可编译生成 scr格式的屏保程序,当然,只是大致的展示这类程序的实现过程,要想真正成为屏保,还要做一些其它的功课,比如动画效果之类的。其实原理还是挺...
Qt实现的获取鼠标移动状态,如果鼠标不移动,使用定时器进入屏保程序,以下是实现想法:http://blog.csdn.net/zhenyu5211314/article/details/18043655
深海生物屏幕保护程序 v1.1 自述文件 ********************************** 简述 ==== 这是大二的时候我帮一个朋友的朋友,一个非计算机系但学计算 机相关专业的学生,做的一个毕业设计作品。真有点奇怪,...
java实现的类似系统的屏幕保护程序!!!
AD组策略使用技巧-使用AD组策略实现统一桌面和屏保
C++修改屏幕保护的程序,其实就是修改注册表和释放文件
《播放器兼屏保》软件集成播放器、电影屏幕保护、音乐屏幕保护、相册屏幕保护、精灵屏幕保护、透明屏幕保护、留言屏幕保护、定时更换桌面墙纸和定时关机等功能,播放器兼屏保软件集成多种屏幕保护功能与播放器功能于...
动态屏幕保护程序,利用c++实现
使用勾子全局监控鼠标键盘实现的屏幕保护。 同实现了类似于QQ离开状态功能 支持.net 2.0 及以上版本 .net 2.0 vs2005 下测试可用
在TI的EK-LM3S8962开发板LED屏幕上实现屏幕保护程序,8962为ARM Cortex-M3内核,屏幕保护程序使用随机数生产30条曲线,在屏幕上形成屏幕保护的效果。
VB 文字屏幕保护 VB 文字屏幕保护 VB 文字屏幕保护
用VC编的屏保程序,实现一般的屏幕保护功能,希望对大家有用!
VC_6_0下OpenGL屏幕保护程序的实现
Delphi 完成一款带密码保护的屏幕保护,这是烈火下载站自从开通了源代码下载以来,第一款制作屏保的示例,带密码保护,需输入密码才能取消屏保,解锁密码为:cpcw,当然这个密码可以在源码中修改,请大家参考下,...