3

我一直在尝试在我的植根S8 上将内部演示应用程序提升为设备所有者,但一直遇到问题。

我尝试过的方法:

1) NFC 配置(如此所述)

当使用带有 Android Bean 的 NFC 设置设备所有者时,S8 显示“由于设备的安全准则,无法创建工作配置文件”-错误

2) Adb 配置(从控制台):

使用时

dpm set-device-owner my/app/namespace/.DeviceAdmin

在 Windows 控制台中,我收到以下错误

java.lang.SecurityException: Neither user 2000 nor current process has com.samsung.android.knox.permission.KNOX_PROXY_ADMIN_INTERNAL.,com.sec.enterprise.permission.MDM_PROXY_ADMIN_INTERNAL
        at android.os.Parcel.readException(Parcel.java:1693)
        at android.os.Parcel.readException(Parcel.java:1646)
        at android.app.admin.IDevicePolicyManager$Stub$Proxy.setActiveAdmin(IDevicePolicyManager.java:5825)
        at com.android.commands.dpm.Dpm.runSetDeviceOwner(Dpm.java:145)
        at com.android.commands.dpm.Dpm.onRun(Dpm.java:96)
        at com.android.internal.os.BaseCommand.run(BaseCommand.java:51)
        at com.android.commands.dpm.Dpm.main(Dpm.java:41)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:307)

向我的清单添加缺少的权限并没有改变任何东西。

3)手动创建 xml 文件(如此所述)

在这种情况下,我可以在正确的文件夹中创建 xml,但是当我重新启动手机时,文件被删除并且我的应用程序没有注册为设备所有者

我还有其他方法可以尝试吗,或者有人知道问题出在哪里吗?

4

2 回答 2

2

感谢 Freds 的评论,我查看了我的清单并将其与我一直在使用的另一个应用程序进行了比较,并且能够使Adb 配置正常工作。

我在清单中添加了以下内容,并且错误没有再次发生:

<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

<application       
   ...
   android:testOnly="false">

在此之后,命令

dpm set-device-owner my/app/namespace/.DeviceAdmin

执行没有错误。

老实说,我不太清楚其中哪一个成功了,因为我无法在不进行出厂重置的情况下取消配置我的设备,但我想无论如何我都会分享它,并希望它可以为其他人节省一些时间。

于 2017-08-17T11:54:49.843 回答
2

从您尝试过的示例中,您似乎正在尝试获取设备所有者权限,而不是设备管理员:

  • Device Admin(在 Android 2.2 中引入)提供有限的管理功能,并且可以由用户授予任何请求它的应用程序,
  • 设备所有者(在 Android 5.0 中引入)提供完整的管理功能,但在设备设置期间只能授予一个应用程序,因此您需要先将设备恢复出厂设置。

如果你想实现设备管理,你可以按照这个指南

如果你想实现设备所有者,你可以

  • 使用简单的Android Management API,但您可能会缺少一些高级功能,
  • 或构建您自己的 Device Policy Controler 应用程序并使用一种可用的配置方法(QR 码、NFC、托管的 Google Play 帐户等)设置设备,这要复杂得多,但您可以访问所有 DevicePolicyManager API。
于 2017-08-11T09:51:05.817 回答