现在的位置: 首页 > 综合 > 正文

Android屏幕保护KeyguardManager相关内容学习

2013年08月15日 ⁄ 综合 ⁄ 共 2935字 ⁄ 字号 评论关闭

 前阵子收到客户要求,要做一款安卓手机和平板上使用的屏保,其实蛮奇怪的,电脑用屏保倒是见得多了,可是手机不使用的时候关掉屏幕不就OK了吗?话说现在的智能手机电池都不耐用的可怜,还装屏保岂不是很费电。原来客户是用于放在营业厅(手机相关),通过手机或者平板来使用相关设备投射到电子屏幕上展示广告的用途,24小时不断电,只是展示用,故电量不作考虑。要求在服务端上传欲展示的图片,PDA上可以进行获取更新图片,只要不断滚动他们的广告就可以了。起初并不是我来做的,同事已经都写的差不多了,他突然有别的项目很急,留给我来做,也好,以前没做过,顺便了解一下android屏保相关的知识,写下来做积累。

-------------------------------------------------------------------------------------------------------

      首先接触到了KeyguardManager,用来对系统的屏保进行屏蔽

public class KeyguardManager extends Object 

Class that can be used to lock and unlock the keyboard. Get an instance of this class by calling Context.getSystemService(java.lang.String) with argument Context.KEYGUARD_SERVICE. The actual class to control
the keyboard locking is KeyguardManager.KeyguardLock.

一个用于锁屏和解锁的类,通过调用Context.getSystemService(Context.KEYGUARD_SERVICE)来获取实例。实际上用于操控锁屏的是KeyguardManager.KeyguardLock类

KeyguardManager 两个内部类分别是:

(1)KeyguardManager.KeyguardLock(l两个函数)   

记得加权限

<uses-permission   android:name="android.permission.DISABLE_KEYGUARD"/>

         disableKeyguard()函数来解除锁屏

         reenableKeyguard()反解除锁屏.reenableKeyguard()反解除锁屏的意思是:如果在调用disableKeyguard()函数之前是锁屏的,那么就进行锁屏,否则不进行任何操作。当然如果之前没调用disableKeyguard()函数,也不进行任何操作。

(2)KeyguardManager.OnKeyguardExitResult(boolean success)  :返回true表示exitKeyguardSecurely()函数执行成功,否则表示失败<具体自己没用到,是个做判断和debug用的吧估计>

 

-----------------------------------------------------------------------------------------------------

      而后用到的是开启和关闭屏幕唤醒的内容,PowerManager和WakeLock这部分之前用到过,不在详述,这次把这部分单独写成一个工具类,简化代码

[java] view
plain
copy

  1. package com.eyu.screen.util;  
  2.   
  3. import android.content.Context;  
  4. import android.os.PowerManager;  
  5. import android.os.PowerManager.WakeLock;  
  6.   
  7. public class PowerManagerWakeLock {  
  8.   
  9.     private static WakeLock wakeLock;  
  10.       
  11.     /**开启 保持屏幕唤醒*/  
  12.     public static void acquire(Context context) {  
  13.         PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);  
  14.         wakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "PowerManagerWakeLock");  
  15.         wakeLock.acquire();  
  16.     }  
  17.       
  18.     /**关闭 保持屏幕唤醒*/  
  19.     public static void release() {         
  20.         if (wakeLock != null) {  
  21.             wakeLock.release();  
  22.             wakeLock = null;  
  23.         }  
  24.     }  
  25. }  


-------------------------------------------------------------------------------------------------------------------------------------------

其实最主要的应该就是上面的内容,后续就是编写Service和发送广播的操作,并实现和服务端的通信。

 

做完之后抛开服务端和下载更新的内容,自己做了一个单机用的留底,基本思路和操作与公司项目的一致,只是图片需要手动添加而已,使用后会一直监听屏幕的状态,一旦屏幕灭掉会立刻唤醒,使用viewpager和定时器来控制图片自动的翻页,想彻底停掉就需要断掉后台的service,下面是小程序的截图,启动后会先做判断,如果sd卡指定目录没有图片的话,则加载资源文件,有图片加载SD卡中的。

                                                

                                                 
    

 

Service的代码:

[java] view
plain
copy

  1. package com.eyu.screen.UI;  
  2.   
  3. import com.eyu.screen.util.PowerManagerWakeLock;  
  4. import android.app.KeyguardManager;  
  5. import android.app.Service;  
  6. import android.content.BroadcastReceiver;  
  7. import android.content.Context;  

抱歉!评论已关闭.