在我的设备所有者应用程序中,我想创建一个新用户并直接切换到该用户。现在,我只能创建一个新用户,切换到它但是:
我想知道是否有办法以编程方式设置新用户并直接切换到它的会话"。我想以编程方式避免"解锁"页面并使用名称,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的任何文档。 有人可以帮我或指点我有用的链接吗?
答案 0 :(得分:2)
据我所见,无法以编程方式解锁屏幕锁。即使在Lollipop中添加的Smart lock功能也只会禁用密钥保护,这意味着当可信代理解锁设备时,“PIN”或“模式”将转换为“滑动锁定”。即使在这种情况下,您也需要手动滑动屏幕才能解锁设备。
关于第二点,可以避免第一次解锁新创建的用户时提出的“设置向导”。这是如何做到的:
ProfileAdminRcvr.java
中,您需要隐藏名为com.google.android.setupwizard
的系统应用程序。您可以使用onEnabled()
实施的DeviceAdminReceiver
方法(在创建用户时为您的个人资料设置的方法)执行此操作。 以下是执行此操作的代码:
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中尝试做的部分操作(即跳过向导)。