我编写了一个设备所有者信息亭应用程序,我想在该应用程序上删除设备所有者状态,这样我就可以卸载它而无需将设备恢复出厂设置。以下适用于牛轧糖和奥利奥,但不适用于三星平板电脑的棉花糖。
我如何对设备所有者进行编码的细节:
要将应用程序设置为设备所有者,我在安装应用程序后运行此 adb shell 命令:
adb shell dpm set-device-owner com.dps.myapp/.DeviceAdminReceiver
然后,当我尝试删除设备所有者状态并卸载应用程序时,我正在运行以下 shell 命令:
adb shell am force-stop com.dps.myapp
adb shell am start -n com.dps.myapp/.DeactivateDeviceOwnerActivity
adb shell pm uninstall com.dps.myapp
DeactivateDeviceOwnerActivity 是我的应用程序中的一个 Activity,其中包含以下用于清除设备所有者状态的代码:
DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
mDevicePolicyManager.clearDeviceOwnerApp(getApplicationContext().getPackageName());
if (mDevicePolicyManager.isDeviceOwnerApp(getApplicationContext().getPackageName())) {
Toast.makeText(getApplicationContext(),
"Failure! App is still device owner.",Toast.LENGTH_LONG)
.show();
}
else {
Toast.makeText(getApplicationContext(),
"Success!", Toast.LENGTH_LONG).show();
}
奇怪的是,我的 Activity 正在显示 clearDeviceOwnerApp 调用有效的 Toast,但是当我立即运行卸载命令时,我得到“失败 [DELETE_FAILED_DEVICE_POLICY_MANAGER]”的返回,所以显然设备所有者没有被清除我的应用程序。
有谁知道 Marshmallow 和后续 API 之间的任何具体差异,关于设备所有权或 DevicePolicyManager 会导致此代码(适用于 Nougat 和 Oreo)在 Marshmallow 上不起作用?当我发出启动命令让 DeactivateDeviceOwnerActivity 清除设备所有者时,我正在查看系统日志,但没有看到任何表明发生任何异常的信息。任何帮助,将不胜感激。