托管配置:定义字符串数组

Managed Configurations: defining an array of strings

根据restriction entry types,定义一个对象列表我们应该使用bundle_array类型,例子如下:

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

  <restriction
    android:key="vpn_configuration_list"
    android:restrictionType="bundle_array">
    <restriction
      android:key="vpn_configuration"
      android:restrictionType="bundle">
      <restriction
        android:key="vpn_server"
        android:restrictionType="string"/>
      <restriction
        android:key="vpn_username"
        android:restrictionType="string"/>
      <restriction
        android:key="vpn_password"
        android:restrictionType="string"/>
    </restriction>
  </restriction>

</restrictions>

在类似于 List<VpnConfiguration> 的代码中,VpnConfiguration 将是一个包含三个字段 vpn_servervpn_username 和 [=17= 的 pojo ].

到目前为止一切顺利,现在假设需要一个更简单的数据结构,例如 String[]。 根据 Test DPC 这应该是可能的,因为有一个选项可以插入一个字符串数组:

一旦您 select 它,系统就会提示您输入值列表。但是,文档没有 string_array 类型,它只有 bundle_array.

使用 bundle_array 你可以定义一个 List<String> 而不是 String[],但那太过分了:

<restriction
    android:key="mylist"
    android:restrictionType="bundle_array">

    <restriction
        android:key="item"
        android:restrictionType="bundle">

        <restriction
            android:key="name"
            android:restrictionType="string" />

    </restriction>
</restriction>

那么,有没有一种更简单的方法可以定义字符串数组?

好的,看起来可以使用与定义字符串相同的方式来定义字符串数组:

   <restriction
        android:key="my_array"
        android:restrictionType="string"
        android:title="My Array">

然后在接收部分你必须确保你读取的数据是一个字符串数组:

String[] array = restrictions.getStringArray("my_array");

缺点是在后端(EMM 管理)没有线索表明上述限制应被视为字符串数组而不是字符串。

我通过测试发现了这个,仍然不确定这是否是正确的方法...

仅针对 multi-select 限制类型返回 String[] 值类型,为此 EMM returns 从您在 [=12= 中定义的条目中选择的一组条目].

如果您想让企业管理员输入自由格式字符串列表,那么您确实应该定义一个包含 string 限制的 bundle_array

编辑: 请注意,bundle_array 仅在 Android 6.0+ 上可用,并且没有传递自由格式列表的标准方法Android 5.0/5.1 上的字符串。您可以想象在 string 中传递 JSON,但您需要就此 JSON 的格式与 EMM 达成一致,因此它不会自动适用于所有 EMM。