Android 设备管理员禁用
如果未安装设备管理应用程序,则无法将其卸载 残废用户可以从设置中禁用“设备管理员”。 当公司向员工提供安卓设备时,公司希望 可以控制设备及其状态和策略,但用户可以 很容易摆脱这种控制。有人知道怎么可能吗 防止用户禁用设备管理员?Android 设备管理员禁用,android,android-3.0-honeycomb,Android,Android 3.0 Honeycomb,如果未安装设备管理应用程序,则无法将其卸载 残废用户可以从设置中禁用“设备管理员”。 当公司向员工提供安卓设备时,公司希望 可以控制设备及其状态和策略,但用户可以 很容易摆脱这种控制。有人知道怎么可能吗 防止用户禁用设备管理员? 谢谢。没有办法阻止用户禁用设备管理员,至少使用已发布的API。您所能做的最好的事情是,如果某些策略不到位,则不允许程序运行 一些制造商(如三星)已经扩展了基本API以允许附加功能,但这些功能不是标准Android平台的一部分。在DeviceAdminReceiver.j
谢谢。没有办法阻止用户禁用设备管理员,至少使用已发布的API。您所能做的最好的事情是,如果某些策略不到位,则不允许程序运行
一些制造商(如三星)已经扩展了基本API以允许附加功能,但这些功能不是标准Android平台的一部分。在DeviceAdminReceiver.java中,您可以执行以下操作onDisableRequested:
public CharSequence onDisableRequested(Context context, Intent intent) {
SharedPreferences settings = context.getSharedPreferences(MainActivity.class.getName(), 0);
String DEVICE_ADMIN_CAN_DEACTIVATE = settings.getString("DEVICE_ADMIN_CAN_DEACTIVATE", null);
if(DEVICE_ADMIN_CAN_DEACTIVATE.equals("ON")){
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(startMain);
return "OOPS!";
}else{
String msg_char_onDisable = context.getResources().getString(R.string.msg_char_onDisable);
return msg_char_onDisable;
}
}
有一种解决方法可防止禁用设备管理员。 当用户启动停用,并且我们收到ACTION\u DEVICE\u ADMIN\u DISABLE\u请求的回调时,我们将重新启动设置活动意图。
操作系统允许显示一条消息,请求用户确认。根据安卓操作系统的规定,在大约5秒钟内,不允许在此确认对话框上启动任何应用程序。因此,我们尝试打开的设置活动基本上只会在5秒后启动。
要在不允许用户确认停用的情况下度过这5秒钟,设备管理员会在后台线程中反复锁定手机。用户解锁设备5秒后,“设置”活动将重新启动 下面的Device Admin Broadcast Receiver类代码说明了上述方法 DevAdminReceiver.java
public class DevAdminReceiver extends DeviceAdminReceiver {
DevicePolicyManager dpm;
long current_time;
Timer myThread;
@Override
public void onEnabled(@NonNull Context context, @NonNull Intent intent) {
super.onEnabled(context, intent);
Log.d("Root", "Device Owner Enabled");
}
@Nullable
@Override
public CharSequence onDisableRequested(@NonNull Context context, @NonNull Intent intent) {
Log.d("Device Admin","Disable Requested");
Intent startMain = new Intent(android.provider.Settings.ACTION_SETTINGS);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(startMain);
dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
myThread = new Timer();
current_time = System.currentTimeMillis();
myThread.schedule(lock_task,0,1000);
return "Warning";
}
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_DEVICE_ADMIN_DISABLE_REQUESTED.equals(action)) {
CharSequence res = onDisableRequested(context, intent);
if (res != null) {
dpm.lockNow();
Bundle extras = getResultExtras(true);
extras.putCharSequence(EXTRA_DISABLE_WARNING, res);
}
}else if (ACTION_DEVICE_ADMIN_DISABLED.equals(action)) {
Log.d("Device Admin","Disabled");
}
}
// Repeatedly lock the phone every second for 5 seconds
TimerTask lock_task = new TimerTask() {
@Override
public void run() {
long diff = System.currentTimeMillis() - current_time;
if (diff<5000) {
Log.d("Timer","1 second");
dpm.lockNow();
}
else{
myThread.cancel();
}
}
};
}
公共类DevAdminReceiver扩展了DeviceAdminReceiver{
DevicePolicyManager dpm;
长电流时间;
定时器读取;
@凌驾
public void onEnabled(@NonNull上下文,@NonNull意图){
super.onEnabled(上下文、意图);
Log.d(“根”,“设备所有者已启用”);
}
@可空
@凌驾
公共字符序列onDisableRequested(@NonNull上下文上下文,@NonNull意图){
Log.d(“设备管理”、“请求禁用”);
Intent startMain=新的Intent(android.provider.Settings.ACTION\u设置);
startMain.setFlags(意图、标志、活动、新任务);
背景。起始触觉(startMain);
dpm=(DevicePolicyManager)context.getSystemService(context.DEVICE\u POLICY\u SERVICE);
myThread=新计时器();
current_time=System.currentTimeMillis();
myThread.进度计划(锁定任务,01000);
返回“警告”;
}
公共void onReceive(上下文、意图){
String action=intent.getAction();
如果(操作\设备\管理\禁用\请求。等于(操作)){
CharSequence res=onDisableRequested(上下文、意图);
如果(res!=null){
dpm.lockNow();
Bundle extras=getResultTextras(true);
额外putCharSequence(额外禁用警告,res);
}
}else if(操作\设备\管理\禁用。等于(操作)){
Log.d(“设备管理”、“禁用”);
}
}
//每秒重复锁定手机5秒钟
TimerTask lock_task=new TimerTask(){
@凌驾
公开募捐{
long diff=System.currentTimeMillis()-当前时间;
如果(Diff)我确实发生了其他事情,因为我正在思考某些应用程序(例如WaveSecure)的功能。因为请求禁用设备管理员的用户本身就是一个操作(请参阅),所以您可能可以在收到此操作时锁定设备(假设应用程序安装了此功能)。我很确定WaveSecure就是这么做的。谢谢你的例子,我看了WaveSecure。它们确实可以防止用户禁用管理器,实际上它会被禁用,但在输入密码之前保持锁定活动。重新启动管理器后启用。嘿,马克,在WareSecure中,它们会弹出“屏幕锁定”每次用户尝试运行任何应用程序时的活动?他们如何处理其他应用程序启动事件的想法?嗯…不是即时的。这里有一个关于这个主题的讨论-,马克·墨菲表示没有这个意图,所以可能没有:-)当用户在“设备管理”部分单击“停用”时,如果应用程序内设置设置为“停用”,它将开始显示主屏幕,并且不会停用deviceadmin,但我想用户可以清除GetSharedReferences,所以最好将该信息保存到其他地方。这在Android 4.1.2上不起作用。“哎呀!”将弹出,然后过一段时间主屏幕。