2

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

  • 它把我带到了键盘保护屏幕,我需要手动解锁。
  • 然后,告诉我设置新创建的用户 - 带有名字、姓氏、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官方页面上找不到任何有关设备所有者应用程序配置文件应用程序的文档。任何人都可以帮助我或指向我有用的链接吗?

4

2 回答 2

2

据我所知,没有办法以编程方式解锁屏幕锁定。即使是 Lollipop 中添加的Smart lock功能也只会禁用 Key Guard,这意味着当受信任的代理解锁设备时,“PIN”或“Pattern”将转换为“Swipe Lock”。即使在这种情况下,您也需要手动滑动屏幕来解锁设备。

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

  • 在您的 中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");

}
于 2015-01-12T17:43:01.567 回答
0

谷歌更新了它的演示应用程序以使用 Android-N 预览版,似乎会在 N 中调用一个标志DevicePolicyManager.SKIP_SETUP_WIZARD来执行您尝试执行的部分操作(即跳过向导)。

于 2016-04-22T00:50:05.057 回答