Android学习——Keyguard之解锁屏

Keyguard:即Android 中处理锁屏(电源键按下、屏幕显示时间超时)、解锁(滑动、图案、指纹、声音、人脸、虹膜等)、锁屏下显示通知管理者。

闲言少叙来看一下涉及Keyguard的部分:

1、SystemUI

       \frameworks\base\packages\SystemUI

       

2、Keyguard

      \frameworks\base\packages\Keyguard


3、\frameworks\base\services\core\java\com\android\server\policy

      

一些重要文件大意:

      PhoneWindowManger:管理系统的准备工作等

      KeyguardViewMediator:涉及到keyguard的协调请求,包含了关于keyguard的状态、电源管理事件是否影响keyguard当被展示或者重启,回调手机窗口管理器通知其什么时候展示,从keyguard视图事件本身叙述这个keyguard成功解锁等问题。

      KeyguardService:继承自Service,处理Keyguard的系统服务。

      StatusBarKeyuardViewManger:管理、创建、显示、隐藏和重置状态栏中的Keyguard。

      KeyguardBouncer:用于管理锁屏的措施。

      

      

      


画的序列图实在“”吃藕“”,借鉴一下前人的锁屏流程时序图

keyguard


直接从framework的锁屏入口阅读代码;

     KeyguardService.java  

     /frameworks/base/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java

public void onSystemReady() {
            checkPermission();//避免死锁并检查系统权限
            mKeyguardViewMediator.onSystemReady();//进入锁屏入口
        }
    

     KeyguardViewMediator.java

   /frameworks/base/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java

public void onSystemReady() {
        mSearchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE);
        synchronized (this) {
            if (DEBUG) Log.d(TAG, "onSystemReady");
            AntiTheftManager.checkPplStatus();//检查手机是否加密(是否加了手机隐私锁)
            mSystemReady = true;
            doKeyguardLocked(null);// 进行锁屏预处理判断等操作
            mUpdateMonitor.registerCallback(mUpdateCallback);
            mPowerOffAlarmManager.onSystemReady();
        }
        // Most services aren't available until the system reaches the ready state, so we
        // send it here when the device first boots.
        maybeSendUserPresentBroadcast();
    }

onKeyguardLocked()

<
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
非常好的问题!Android广播是一种机制,它允许应用程序在系统中发送和接收消息,从而可以在不同的组件之间共享信息。在这种情况下,你可以使用BroadcastReceiver接收系统锁屏的广播事件,并在屏幕锁定时显示单词。 具体实现方式如下: 1. 首先,你需要定义一个BroadcastReceiver类来接收系统锁屏广播事件。在这个类中,你可以设置屏幕锁定时显示的单词,并将其显示在锁屏界面上。 ```java public class LockScreenReceiver extends BroadcastReceiver { private String[] words = {"apple", "banana", "cherry", "orange"}; // 定义单词列表 @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { // 屏幕锁定时显示单词 showWordOnLockScreen(context); } } private void showWordOnLockScreen(Context context) { // 从单词列表中随机选择一个单词 Random random = new Random(); int index = random.nextInt(words.length); String word = words[index]; // 在锁屏界面上显示单词 KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("WordLock"); keyguardLock.disableKeyguard(); PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wakeLock = powerManager.newWakeLock( PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "WordLock"); wakeLock.acquire(); // 在锁屏界面上显示单词 Intent showWordIntent = new Intent(context, LockScreenActivity.class); showWordIntent.putExtra("word", word); showWordIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(showWordIntent); // 释放锁屏和唤醒锁 keyguardLock.reenableKeyguard(); wakeLock.release(); } } ``` 2. 接下来,你需要在AndroidManifest.xml文件中注册BroadcastReceiver。在这个文件中,你需要为BroadcastReceiver指定一个action为Intent.ACTION_SCREEN_OFF,这样它就可以接收系统锁屏广播事件。 ```xml <receiver android:name=".LockScreenReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.SCREEN_OFF" /> </intent-filter> </receiver> ``` 3. 最后,你需要创建一个LockScreenActivity类来显示单词。在这个类中,你可以从Intent中获取单词,并在屏幕上显示它。 ```java public class LockScreenActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 获取单词 String word = getIntent().getStringExtra("word"); // 在屏幕上显示单词 TextView textView = new TextView(this); textView.setText(word); textView.setTextSize(32); setContentView(textView); } } ``` 这样,当用户锁定屏幕时,LockScreenReceiver将接收到广播事件,并在锁屏界面上显示一个随机单词。这个功能可以帮助用户在碎片化时间内记忆单词,提高学习效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值