0

我或多或少能够理解和实施所有这些概念,但不知何故完全混淆了将它们放在哪里以及如何组合在一起。

简而言之,这就是我试图在无根 android 手机上实现的目标

  1. 让 SMS 广播接收器使用密码侦听传入的 SMS
  2. 如果短信有关键字锁定,则锁定屏幕。

BroadCastReceivers 和 DeviceAdminRecivers 如何齐头并进?

例如。我有拦截短信的工作代码。一个调用 dummy(empty) lockScreen() 函数的 switch case。现在我应该把 DeviceAdminReceiver 的代码放在哪里,这样我就可以锁定屏幕(一个带有密码框的新活动,其中 HOME 和其他菜单按钮被禁用)?

所以基本上它来自 BroadcastReceiver -> Device Admin -> Activity。

请帮我。

4

3 回答 3

1

最简单的方法是创建自定义主屏幕并添加下面提到的功能,使其看起来像自定义锁定屏幕:

  1. 从自定义 LockScreen 活动中删除通知/状态栏
  2. 当 LockScreen 活动可见时捕获并禁用 HOME/MENU 按钮单击
  3. 当收到秘密“锁定电话”短信时,让 SMS 广播接收器调用自定义 LockScreen 活动。
  4. 有一个 PhoneBroadstReceiver 以使 LockScreen 重新出现一些延迟(100 毫秒),以便来电系统默认屏幕不会将您的 lockScreenActivity 推到后台

PS:DeviceAdmin 可用于锁定您的手机,如果已设置密码,则显示系统默认锁屏

于 2012-03-27T03:26:07.617 回答
0

我不相信您可以在无根手机上创建自定义锁定屏幕,因为据我所知,在应用程序中禁用主页按钮是不可能的。

好吧,我不知道这些锁屏应用程序,但经过进一步研究,这似乎是要走的路:

1) 让您的应用注册必要的 SMS 意图广播。

2)收到广播后,检查lock关键字

3) 如果 lock 关键字存在,以编程方式锁定手机,使用:

private void lockScreen(){
    KeyguardManager mgr = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE); 
    KeyguardLock lock = mgr.newKeyguardLock(KEYGUARD_SERVICE); 
    lock.reenableKeyguard();
}

当然,这不会使用您的自定义锁定屏幕,但可能没有必要。如果您确实想要自己的锁定屏幕,那么您应该遵循本指南

http://developer.android.com/guide/topics/admin/device-admin.html

创建一个。

于 2012-03-20T03:53:27.867 回答
0

编码:

KeyguardManager mgr = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE); 
KeyguardLock lock = mgr.newKeyguardLock(KEYGUARD_SERVICE); 
lock.reenableKeyguard();

不会锁定屏幕。它只是启用键盘锁。当你运行时

lock.disableKeyguard();

and press lock button on the device it will not lock the keyguard. To lock the screen programatically you have to refer to Device Admin and use locknow() method to lock immediately.

于 2012-06-27T07:33:10.710 回答