我正在为Android安装一个MDM(移动设备管理)应用程序,但我遇到了一个很大的问题,那就是用户可以在设置>安全>设备管理员中禁用我的应用程序.我唯一能做的就是通过覆盖onDisableRequested(...)
我的DeviceAdminReceiver
子类中的方法来显示警告消息,但我真的想阻止用户完全禁用我的管理员应用程序.
我试图覆盖该onReceive(...)
方法,以便在系统广播ACTION_DEVICE_ADMIN_DISABLE_REQUESTED和ACTION_DEVICE_ADMIN_DISABLED操作时没有任何反应,但到目前为止它还没有奏效.显然其他一些组件在它们到达我的onReceive(...)
方法之前处理这些操作,我不知道为什么.我希望能够显示我自己的自定义对话框,指示用户无法从此部分禁用管理员应用程序,甚至可能要求用户设置管理员密码来执行此操作.
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_PASSWORD_CHANGED.equals(action)) {
onPasswordChanged(context, intent);
} else if (ACTION_PASSWORD_FAILED.equals(action)) {
onPasswordFailed(context, intent);
} else if (ACTION_PASSWORD_SUCCEEDED.equals(action)) {
onPasswordSucceeded(context, intent);
} else if (ACTION_DEVICE_ADMIN_ENABLED.equals(action)) {
onEnabled(context, intent);
} else if (ACTION_DEVICE_ADMIN_DISABLE_REQUESTED.equals(action)) {
} else if (ACTION_DEVICE_ADMIN_DISABLED.equals(action)) {
} else if (ACTION_PASSWORD_EXPIRING.equals(action)) {
onPasswordExpiring(context, intent);
}
}
Run Code Online (Sandbox Code Playgroud)
我需要帮助来解决这个问题.
谢谢,
您可以使用新的设备所有者模式从Android 5 Lollipop执行此操作.然后灰显的设备管理员选项和用户无法禁用它,因此不卸载设备管理员应用程序.
但请注意,安装设备所有者应用程序并不容易,必须在配置时使用NFC完成,或者从带有adb的计算机(用于测试但不用于部署),或使用MDM完成您的情况. ..
没有办法阻止用户禁用,这是他的权利。
但是要确保用户本人实际上正在删除管理员权限,请使用他的密码将设备锁定在onDisableRequested并返回诸如“有人试图禁用此应用程序管理员功能。是你吗,你确定吗?”。
现在,如果真实用户以外的其他人试图禁用它,他必须在继续之前输入密码。
我同意 FoamyGuy 的观点,你不能阻止禁用管理。否则,您的应用程序根本无法卸载。
一般来说,用户向某些应用程序授予设备管理权限,并且可以随时删除这些权限。
任何广播都只是通知,您无法处理它并阻止某些操作的发生。系统只是告诉监听应用程序正在发生一些事情。
另外,请阅读以下内容: