以编程方式锁定 Android 设备

Posted

技术标签:

【中文标题】以编程方式锁定 Android 设备【英文标题】:Lock the Android device programmatically 【发布时间】:2011-05-31 12:18:31 【问题描述】:

我一直在尝试通过程序锁定设备。但我仍然找不到解决方案。 我想通过程序锁定android froyo2.2。我已经尝试过 keyguardmanager 和 DeviceAdminManager。

我的应用是远程锁定设备。当收到带有一些要锁定的密码字的消息时,它会锁定手机。我找到了许多 Api_demo 程序作为解决方案,但我无法单独从中提取锁定代码并找到解决方案。

【问题讨论】:

然后自己提供答案,并接受它 【参考方案1】:

活动类应该是内部类,外部类应该扩展 DeviceAdminReceiver

public class adminActivity extends DeviceAdminReceiver 

   public static class Controller extends Activity 

                    DevicePolicyManager mDPM;
            ComponentName mDeviceAdminSample;

        protected void onCreate(Bundle savedInstanceState) 
                super.onCreate(savedInstanceState);

                mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
                mDeviceAdminSample = new ComponentName(Controller.this,
                        adminActivity.class);
      
   

要锁定设备,请在您用于锁定的事件中编写代码

if (active) 
mDPM.lockNow();

如果启用了 DeviceAdmin,则手机将被锁定。 要启用设备管理员,需要调用 DevicePolicyManager 意图,并且它应该由用户启用。

Intent intent = new   Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);  
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);        

【讨论】:

adithi waht 是securemeAdmin 和活动?我有同样的问题。你能解释一下吗 谁能说出这里什么是活动的,什么是secureadmin? 以上代码取自 Android SDK 提供的 Android sdk 示例中的 DeviceAdminSample。 APIDemos-->应用程序 如果您刚刚粘贴了securemeAdmin 的内容,将会大大节省大量时间。 完整代码见本帖已接受答案:***.com/questions/8987847/…【参考方案2】:

为了解决此任务,您可以查看NoKeyGuard source code,更准确地说是查看 NoKeyGuard Service 类和 KeyguardLockWrapper 类。

要解锁设备,请在您用于解锁的事件中写入代码:

    Context context= getApplicationContext();
    KeyguardManager _guard = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
    KeyguardLock _keyguardLock = _guard.newKeyguardLock("KeyguardLockWrapper");
    //to disable
    _keyguardLock.disableKeyguard();
    //to enable
    _keyguardLock.reenableKeyguard();

【讨论】:

现在已经过时了。不要使用!【参考方案3】:

活动类应该是内部类,外部类应该扩展DeviceAdminReceiver

public class adminActivity extends DeviceAdminReceiver 

    public static class Controller extends Activity 

                DevicePolicyManager mDPM;
        ComponentName mDeviceAdminSample;

    protected void onCreate(Bundle savedInstanceState) 
            super.onCreate(savedInstanceState);

            mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
            mDeviceAdminSample = new ComponentName(Controller.this,
                    adminActivity.class);
  
 

【讨论】:

【参考方案4】:
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = 0;
        getWindow().setAttributes(lp);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 

【讨论】:

这曾经可以工作,比如在 Android 2.3 中,但现在不再工作了。

以上是关于以编程方式锁定 Android 设备的主要内容,如果未能解决你的问题,请参考以下文章

Android屏幕以编程方式固定没有设备所有者

我如何以编程方式锁定手机android

如何以编程方式锁定 Chromebook?

在android中以编程方式关闭shift键

如何以编程方式“重启”Android 应用程序?

如何在android中启用“在锁定屏幕中显示”权限