大体的思路:系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面。当按Power键时,系统会像向外广播消息Intent.ACTION_SCREEN_OFF, 同样当在锁屏的情况下按Power键会向外广播Intent.ACTION_SCREEN_ON消息,捕捉这些消息是前提。但由于这些检测都需要实时的,所以需要创建一个Service 来负责检测这些。Now, here we go.

示例以及实现过程:
第一步,创建Service, 创建了MyService.java文件用于创建Servicepublic class MyService extends Service { …}
第二步,注册你需要监听的Broadcast Receiver,在这里我们需要检测Intent.ACTION_SCREEN_OFF 和Intent.ACTION_SCREEN_ON消息,

private void registerIntentReceivers()
{
Log.d(TAG, "***registerIntentReceivers");
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
filter.addAction("android.intent.action.SCREEN_ON");
LockLisnter receiver = new LockLisnter(); //用于侦听
registerReceiver(receiver, filter);
}
在这里可能有个问题,为什么不写在AndroidManifest.xml中呢?这样不是更方便吗?Good question!

第三步, 在Broarcast Receiver中接收这些广播。
public void onReceive(Context context, Intent paramIntent)
{ if ("android.intent.action.SCREEN_OFF".equals(str))
{
Log.d(TAG,"***"+str);
Log.d(TAG,"***Equal with SCREEN_OFF");
startMainActivity(); //如果是Screen_Off,启动自己的画面
}
}
虽然在这里当按Power键的时候可以启动自己的Lock画面,但是在自己的启动之后仍然会被系统的覆盖掉。所以就需要把系统的干掉了。
第四步,替换系统的LockScreen.
KeyguardManager mKeyguardManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock mKeyguardLock = mKeyguardManager.newKeyguardLock("Activity1");
mKeyguardLock.disableKeyguard();
其实系统的LockScreen的名字准确的说应该是Keyguard。
在这里需要导入其他一些文件:
import android.app.KeyguardManager;
import android.app.KeyguardManager.KeyguardLock;
有了这些资源虽然可以编译通过了,但是当调用到mKeyguardLock.disableKeyguard();
这句的时候就会崩溃,关键的一个原因就是权限的问题,因为要替换系统的 必须的有足够的权限,因此在Manifest.xml中添加:
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

好了,到这里你就可以尽情的Customize系统的Lock Screen吧

总结:在替换系统的Lock Screen中大概用到了,Service ,Activity, broadcast Receiver,等知识点,在此不做详细讲解,再次强调,第一. 注册监听系统的有些Broadcast receiver,有时候写在Manifest.xml里是收不到的,第二,替换系统的东西,在很多时候需要增加权限,注意在Manifest文件中增加权限

更多相关文章

  1. Android(安卓)权限设置大全
  2. 电话权限确认
  3. 【整理】Android-Recovery Mode(recover模式详解)
  4. Android(安卓)6.0 监听系统通知(Notification)
  5. 【Cocos2D-X 】初窥门径(12)游戏中的对话框
  6. Android(安卓)NDK r5 windows系统上安装与使用
  7. android framework层添加串口操作
  8. Android(安卓)调用系统相机返回data为null
  9. getSystemService获得系统服务列表

随机推荐

  1. 昨天花了两个小时做了一个天气预报的Demo
  2. Android通过反射打造可以存储任何对象的
  3. android SQLite table book有4列,但提供了
  4. Android之DOM解析XML
  5. 【Android】仿斗鱼滑动验证码
  6. 你是哪个级别?(工程师级别划分)
  7. Android——播放器和图片轮播
  8. Android极光推送jPush混淆解决方案终极篇
  9. Android 漂亮的 Dialog (弹出框)
  10. Android添加一个回调监听接口