9

我正在尝试使用 MobileIron EMM 为我的应用程序设置远程配置。我已经按照开发人员指南中的说明完成了所有工作: 1. 我已经设置了清单:

...
        <meta-data
            android:name="android.content.APP_RESTRICTIONS"
            android:resource="@xml/app_restrictions"/>
    </application>

2.我已经描述了限制:

<?xml version="1.0" encoding="utf-8"?>
<restrictions xmlns:android="http://schemas.android.com/apk/res/android">
    <restriction
        android:title="@string/some_title"
        android:key="SOME_KEY"
        android:restrictionType="string"
        android:defaultValue="123"/>
</restrictions>

3. 我正在尝试按以下方式接收它:

RestrictionsManager manager = (RestrictionsManager) context.getSystemService(Context.RESTRICTIONS_SERVICE);
        Bundle b = manager.getApplicationRestrictions();
        if(b!=null){
            if(b.containsKey("SOME_KEY")) {
                return b.getString("SOME_KEY");
            }else{
                System.out.println("bundle is not null");
                for (String s: b.keySet()){
                    System.out.println("key in b is : " + s);
                }
                System.out.println(b.isEmpty() + " bundle is empty");
            }
        }else{
            System.out.println("Bundle is null");
        }
        return "";
    }

我总是得到输出:

bundle is not null
true bundle is empty

虽然我已经为限制设置了默认值。为什么我至少没有获得限制的默认值?为什么我从来没有得到实际值(在服务器端,我使用 MobileIron Cloud 及其 AppConnect 配置设置了值)?尝试了几种设备。我错过了什么?请帮忙。我的目标是远程设置应用程序的一些键值。

4

3 回答 3

9

如果您根本没有收到任何限制,那可能是因为您的应用不是托管配置文件的一部分。应用限制仅在两种情况下有效...您的设备已使用您的 EMM 控制台进行配置(只能在恢复出厂设置后完成)或您的设备具有由您的 EMM 控制台管理的 Android for Work 配置文件。您实际上不需要在清单中声明每个限制,仅允许 EMM 在其控制台中提供该信息。

在未配置设备上测试应用限制的最简单方法是从 google play 商店下载 Test DPC 应用。设置它会加密您的设备并安装可用于测试的工作配置文件。您可以使用 DPC 应用程序模拟应用程序限制、从清单中读取限制以及 EMM 执行的许多其他操作。您可以使用 adb 在工作配置文件中安装您的应用,或者按照开发者指南告诉 Android Studio 如何在您的工作配置文件中运行应用。

https://developer.android.com/work/guide.html#testing

于 2017-01-30T16:59:20.020 回答
5

这两个帖子应该对post1post2有所帮助。

弗雷德帮助我从这些帖子中理解,但总结一下:

如果托管配置提供程序未明确设置项目,则该项目将不在捆绑包中。一个空的但“非空”的包仅意味着托管配置提供程序没有设置任何内容。此处不使用托管配置 XML 文件中的 defaultValue。并且该应用程序没有得到积极管理。

要获取默认值,请使用此 RestrictionsManager.getManifestRestrictions() 查询配置项的值。它返回在托管配置 XML 文件中设置的所有 RestrictionEntry 对象的列表。这意味着项目的值是 XML 文件中定义的 defaultValue。

于 2017-07-20T18:34:23.450 回答
1

我有同样的问题。我们已经使用 Xamarin csharp 应用程序进行了测试,使用了可通过 Play 商店获得的公共 google 测试应用程序“Test DPC”。它有一个“加载清单限制”按钮,应该能够加载定义的应用程序限制(无论如何,在我的情况下它没有)。它仅在以下情况下有效:

  1. 我没有调试应用程序(使用 DPC 应用的值始终未定义/为空)而是直接在设备上启动,并且
  2. 在 Test DPC 应用程序中手动添加/设置键/值对。

然后我从 DPC 中切换了我的布尔值...(确保在“管理应用程序”屏幕中按下“保存”)

于 2017-01-25T14:18:35.937 回答