有时候,需要在程序中实现屏保相关的功能,如指定一段时间后,显示自定义的屏保画面,网上查了很多资料,大多讲得不详细,或者说不完整。故对屏保相关的功能进行整理。
1、注册一个BroadcastReceiver,用于接收ACTION_SCREEN_OFF事件。当接收到这个事件时,打开自定义的屏保画面。以下代码为了测试方便,放在MainActivity.java中,也可以根据需要,把代码放入service中。
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
registerReceiver(mMasterResetReciever,
new
IntentFilter(Intent.ACTION_SCREEN_OFF));BroadcastReceiver
mMasterResetReciever= new
BroadcastReceiver() { public
void
onReceive(Context context, Intent intent){ try{ Intent
i = new
Intent(); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.setClass(context,
ScreenSaverActivity.class); context.startActivity(i); }catch(Exception
e){ Log.i("Output:",
e.toString()); } }}; |
2、完成这一步时,虽然屏幕关闭时,屏保画面被显示,但由于接收的是ACTION_SCREEN_OFF事件,所以屏幕已经变黑了,这个时候就需要强制点亮屏幕。
首先,在AndroidManifest.xml中加上permission 权限:
|
1
|
<uses-permission
android:name="android.permission.WAKE_LOCK"
/> |
以下代码在ScreenSaverActivity.onCreate中
|
1
2
3
4
5
|
PowerManager
pm = (PowerManager)getSystemService(POWER_SERVICE);mWakeLock
= pm.newWakeLock( PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.SCREEN_DIM_WAKE_LOCK
| PowerManager.ON_AFTER_RELEASE,
"SimpleTimer"); |
然后在屏保画面显示时,点亮屏幕。在ScreenSaverActivity.onResume中加入
|
1
|
mWakeLock.acquire(); |
为了能够在退出屏保时,能够让屏幕可以关闭,我们必须释放WakeLock.故在ScreenSaverActivity.onPause中加入
|
1
|
mWakeLock.acquire(); |
注意,必须放在onResume中,如放在别的地方。会导致程序无法再次进入屏保,具体原因不详。由于手头只有一个手机,不能进行广泛的测试。
3. 完成第二步后,一般情况下大功告成。按键就可以返回程序。但有时候需要点击屏幕就返回系统。这个时候会发现,无论怎么样点击屏幕,系统都不会有响应,因为此时屏幕已经被锁定。因此,要实现这个功能,在打开屏保时,需要关键屏幕的锁定功能。
首先,在AndroidManifest.xml中加上permission 权限:
|
1
|
<uses-permission
android:name="android.permission.DISABLE_KEYGUARD"
/> |
再次,把以下这段代码加入合适的地方。只要启动屏保时能够被调用到
|
1
2
3
|
KeyguardManager
mKeyguardManager= (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);KeyguardLock
mKeyguardLock= mKeyguardManager.newKeyguardLock(TAG);mKeyguardLock.disableKeyguard(); |
当然也可以通过以下代码开启屏幕锁定功能。
|
1
|
mKeyguardLock.reenableKeyguard(); |
本文详细介绍如何在Android应用中实现自定义屏保功能,包括屏保触发、屏幕点亮及解锁处理等关键技术点。
825

被折叠的 条评论
为什么被折叠?



