将app设为设备管理员

时间:2017-07-24 06:13:39

标签: java android adb device-admin

我正在使用以下代码将app设置为设备管理员

Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminComponentName); // Here setting my receiver as device admin
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "You must enable device administration for certain features"
                            + " of the app to function.");
startActivityForResult(intent, 50);

允许app成为device admin后,我正在执行以下代码

devicePolicyManager.setSecureSetting(deviceAdminComponentName, Settings.Secure.INSTALL_NON_MARKET_APPS, "1");

这里它引发了我的错误 Admin component info {...} not set to profile owner..

我用Google搜索并发现可以使用以下adb命令将DeviceAdminReceiver设为管理员

dpm set-device-owner com.yego.driverkiosk/.DeviceAdminMaker它有效。但我希望它只能从代码中完成。

DeviceAdminReceiver

public class DeviceAdminMaker extends DeviceAdminReceiver {
@Override
public void onEnabled(Context context, Intent intent) {
   // showToast(context, context.getString(R.string.admin_receiver_status_enabled));
}

@Override
public void onDisabled(Context context, Intent intent) {
    //showToast(context, context.getString(R.string.admin_receiver_status_disabled));
}

@Override
public void onPasswordChanged(Context context, Intent intent) {
   // showToast(context, context.getString(R.string.admin_receiver_status_pw_changed));
}

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
}
}

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您无法仅通过代码执行此操作。这些是非常安全的设置。基本上,您要求的权限高于设备超级用户权限的用户。如果任何恶意软件可以使用它,它将永远不会被允许通过另一个频道。这些代码仅用于您物理控制的设备,例如自助服务终端或公司拥有的设备。

(另外 - 如果您通过dpm将自己设置为设备策略所有者,那么没有理由让自己成为管理员,所有者是更高级别的管理员。)