以编程方式锁定Android设备

25

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

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


4
请提供需要翻译的英文文本。 - pufferfish
4个回答

16

Activity类应该是内部类,外部类应该扩展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);        

3
你好!"securemeAdmin和active"是什么意思?我也遇到了同样的问题,你能解释一下吗? - arpit
3
请问这里的active和secureadmin是指什么? - Reyjohn
以上代码取自于 Android SDK 中可用的 Android SDK 示例中的 DeviceAdminSample。APIDemos-->app。 - Sundeep
如果你直接粘贴 securemeAdmin 是什么,那肯定会节省很多时间。 - Johann
完整的代码可以在此线程的被接受答案中查看:https://dev59.com/51_Va4cB1Zd3GeqPVKBW - takluiper

2
为了解决这个问题,您可以查看NoKeyGuard源代码,特别是NoKeyGuard服务类和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();

13
这已经过时了。不要使用! - Hawk

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);
  }
 }
}

-4
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = 0;
        getWindow().setAttributes(lp);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 

这个曾经可以工作,比如在Android 2.3上,但现在不再起作用了。 - DagW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接