1

我编写了一个设备所有者信息亭应用程序,我想在该应用程序上删除设备所有者状态,这样我就可以卸载它而无需将设备恢复出厂设置。以下适用于牛轧糖和奥利奥,但不适用于三星平板电脑的棉花糖。

我如何对设备所有者进行编码的细节:

要将应用程序设置为设备所有者,我在安装应用程序后运行此 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,但是当我立即运行卸载命令时,我得到“失败 [DE​​LETE_FAILED_DEVICE_POLICY_MANAGER]”的返回,所以显然设备所有者没有被清除我的应用程序。

有谁知道 Marshmallow 和后续 API 之间的任何具体差异,关于设备所有权或 DevicePolicyManager 会导致此代码(适用于 Nougat 和 Oreo)在 Marshmallow 上不起作用?当我发出启动命令让 DeactivateDeviceOwnerActivity 清除设备所有者时,我正在查看系统日志,但没有看到任何表明发生任何异常的信息。任何帮助,将不胜感激。

4

1 回答 1

0

我在棉花糖上没有遇到过这样的问题。

这很奇怪,虽然我不能给出答案,但我会提出一些建议

1)这可能是一个错误。因此,您可以将设备恢复出厂设置并重试。

2)使用模拟器进行此类测试非常方便,因为您可以轻松删除并创建一个新的。

我希望它有所帮助。

于 2019-03-04T09:59:38.130 回答