创建新用户后创建新用户

时间:2014-12-19 15:14:17

标签: android android-5.0-lollipop device-policy-manager device-owner

在我的设备所有者应用程序中,我想创建一个新用户并直接切换到该用户。现在,我只能创建一个新用户,切换到它但是:

  • 它将我带到了键盘保护屏幕,我需要手动解锁。
  • 然后,告诉我设置新创建的用户 - 使用名字,姓氏,WIFI设置和3个Google使用统计/报告选项。

我想知道是否有办法以编程方式设置新用户并直接切换到它的会话"。我想以编程方式避免"解锁"页面并使用名称,WIFI设置以及可用的应用和安全设置预先设置新创建的用户。

这是我到目前为止所做的事情:

// init block (in onCreate...)
DevicePolicyManager mDPM  = (DevicePolicyManager) this.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName mDeviceAdminRcvr = new ComponentName(this, DeviceAdminRcvr.class);    

// in my button "create a new user"
ComponentName profileOwnerComponent = new ComponentName(this, ProfileAdminRcvr.class);
Bundle adminExtras = new Bundle();

UserHandle userHandle = mDPM.createAndInitializeUser(mDeviceAdminRcvr, name, ownerName, profileOwnerComponent, adminExtras);

// TODO : place here missing instructions to provision the user...
mDPM.switchUser(mDeviceAdminRcvr, userHandle);

我无法找到关于设备所有者应用个人资料应用的官方Google page的任何文档。 有人可以帮我或指点我有用的链接吗?

2 个答案:

答案 0 :(得分:2)

据我所见,无法以编程方式解锁屏幕锁。即使在Lollipop中添加的Smart lock功能也只会禁用密钥保护,这意味着当可信代理解锁设备时,“PIN”或“模式”将转换为“滑动锁定”。即使在这种情况下,您也需要手动滑动屏幕才能解锁设备。

关于第二点,可以避免第一次解锁新创建的用户时提出的“设置向导”。这是如何做到的:

  • 在您的ProfileAdminRcvr.java中,您需要隐藏名为com.google.android.setupwizard的系统应用程序。您可以使用onEnabled()实施的DeviceAdminReceiver方法(在创建用户时为您的个人资料设置的方法)执行此操作。
  • 要完成此操作,您可以通过设置Settings.Secure.SKIP_FIRST_USE_HINTS属性来禁用“首次使用提示”。

以下是执行此操作的代码:

public class ProfileOwnerRcvr extends DeviceAdminReceiver {

  private DevicePolicyManager mDPM;
  private ComponentName mProfileAdminRcvr;

  @Override
  public void onEnabled(Context context, Intent intent) {

    mDPM.setProfileName(mProfileAdminRcvr, "My new user");
    // ... setup other things by yourself...        

    mDPM.setApplicationHidden( mProfileAdminRcvr, "com.google.android.setupwizard", true);
    mDPM.setSecureSetting(mProfileAdminRcvr, Settings.Secure.SKIP_FIRST_USE_HINTS, "1");

}

答案 1 :(得分:0)

Google updated its demo app要使用Android-N预览版,似乎会有一个名为DevicePolicyManager.SKIP_SETUP_WIZARD的标志,用于执行您在N中尝试做的部分操作(即跳过向导)。