`
wang_peng1
  • 浏览: 3942429 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

屏保的实现

 
阅读更多

最近需要做一个屏保,开始以为很简单,因为系统本身就带了屏保功能,拿出来改改就好,只是后来发现,系统自带的不是和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中实现一个到达特定时间后显示设定效果的屏保。 首先,我们需要了解Android系统对屏保的支持。在Android中,屏保是通过Live Wallpaper服务来实现的。Live Wallpaper是一种特殊的壁纸...

    一个简单的屏保实现源码

    在这个类中,我们需要实现`onCreate()`、`onDestroy()`、`onSurfaceCreated()`、`onSurfaceChanged()`和`onSurfaceDestroyed()`等生命周期方法,以及`draw()`方法用于在屏幕上绘制屏保内容。 5. 设计屏保内容:根据...

    201822090316_手机屏幕保护APP设计与实现.doc

    【手机屏幕保护APP设计与实现】的项目主要是为了开发一款Android平台上的屏幕保护应用程序,它在手机处于空闲状态或休眠模式时,能够自动显示预设的图片,以增加设备的个性化和安全性。该应用的主要功能包括设置屏保...

    vc实现屏幕保护程序

    在本文中,我们将深入探讨如何使用Visual C++(简称VC)来实现...通过参考提供的"用VC制作屏保程序(参考文献).pdf"和"用VC制作屏保程序(提示指南).pdf",你应该能够逐步掌握这些技能,成功创建自己的屏幕保护程序。

    通过C#编程实现电脑屏保功能

    下面,我们将详细讲解实现这个屏保功能的关键步骤和知识点。 1. **创建新项目**: 首先,在Visual Studio 2012中打开,选择“文件”&gt;“新建”&gt;“项目”。在“新建项目”对话框中,选择“Windows Forms应用程序”...

    scr屏幕保护程序

    在这个压缩包中,包含的是10款不同主题的精美屏幕保护程序,下面将逐一介绍这些屏保的特点和可能涉及的技术知识点。 1. **MarineAquarium3.rar**:这可能是一款模拟水族馆场景的3D屏保,用户可以看到逼真的海洋生物...

    简单的屏幕保护程序(VC6源代码,46K)

    通过这个简单的示例,开发者可以进一步探索更复杂的屏幕保护实现,如添加交互性、支持多语言、使用3D图形等。此外,虽然VC6已经较旧,但它提供的编程基础仍然适用于现代的C++开发,尤其是对于理解Windows API和C++...

    模拟屏幕保护程序源代码

    - "屏保仿真"很可能是这个项目的源代码文件,可能包含用于模拟屏幕保护效果的代码。 - 作为初学者的实践项目,它可能包含简单的动画或图像变换,让屏幕在闲置时产生动态效果。 - 项目可能使用了基本的图形库或者...

    mcgs触摸屏屏保功能样例

    总之,MCGS触摸屏的屏保功能是一个实用且灵活的设计,它结合了节能、保护设备和提高用户交互体验的多重优点。通过对MCGS软件的深入理解和实践,开发者可以为各种工业自动化应用场景打造更为智能、人性化的触摸屏界面...

    VC++实现修改屏幕保护

    在IT领域,编程语言C++的强大功能之一就是能够与操作系统深度交互,这其中包括对系统设置的修改,如本文档所提及的"VC++实现修改屏幕保护"。屏幕保护程序是Windows操作系统中的一个重要特性,用于在用户无操作时保护...

    【黑客帝国数字雨屏保】基于Win32的黑客帝国数字雨屏幕保护程序.7z

    【黑客帝国数字雨屏保】是一个利用Win32 API编程技术开发的屏幕保护程序,它模仿了电影《黑客帝国》中的经典数字雨效果。这款屏保在Windows操作系统上运行,为用户提供了独特的视觉体验。通过深入理解Win32 API,...

    C#制作屏幕保护的方法

    本文将详细介绍使用 C# 制作屏幕保护的方法,包括屏幕保护程序的设计、实现字幕显示屏保程序的关键步骤、解决方法等。 一、屏幕保护程序的设计 屏幕保护程序是一个可执行程序,但是它又是一个比较独特的exe文件。...

    windows屏幕保护程序

    7. **自定义屏幕保护程序**:除了使用现成的屏保,有编程基础的用户还可以使用Visual Basic、C#等语言编写自己的屏幕保护程序,实现更加个性化的效果。 总的来说,屏幕保护程序是Windows操作系统中一个有趣的元素,...

    汇编语言编写屏幕保护

    在DOS环境下,程序员可以直接访问系统硬件,实现对硬件的精确控制,如本例中的屏幕保护程序就是通过直接操作视频内存来实现动态效果的。 ### 屏幕保护程序工作原理 屏幕保护程序的主要目的是在用户长时间未操作...

    Android-screensave.zip_Android 屏保_Android屏保_android

    【Android屏幕保护程序开发详解】 在Android操作系统中,屏幕保护程序(Screen Saver)是一种能够自动启动并展示特定视觉效果的程序,它通常在设备无操作一段时间后出现,旨在节省电池并保护屏幕。本资源“Android-...

    易语言屏幕保护程序源码易语言官网

    6. **泡泡屏保.e**:这是一个已经编译好的屏幕保护程序实例,可能是用易语言编写并编译后的可执行文件。通过反编译或反汇编工具,我们可以分析其内部工作原理,学习如何在易语言中实现类似的屏幕保护效果。 7. **...

    Qt实现屏保程序

    Qt实现的获取鼠标移动状态,如果鼠标不移动,使用定时器进入屏保程序,以下是实现想法:http://blog.csdn.net/zhenyu5211314/article/details/18043655

    有意思的VB屏保程序 将当前屏幕生成屏幕保护

    标题中的“有意思的VB屏保程序 将当前屏幕生成屏幕保护”指的是使用Visual Basic(VB)编程语言开发的一种创新性屏幕保护程序。这种程序能够捕捉电脑屏幕的当前显示内容,并将其转化为动态的屏幕保护效果,例如描述...

    java 屏幕保护程序

    在Java中实现屏幕保护程序主要涉及到AWT和Swing库,这两个库提供了丰富的图形用户界面组件和事件处理机制。 首先,我们来了解一下Java中的图形环境初始化。在Java中,AWT(Abstract Window Toolkit)是最早的图形...

Global site tag (gtag.js) - Google Analytics