RestrictionManager getRestrictions() 总是为空。

12

我正在尝试使用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配置设置了这些值)?我已经尝试了几个设备。我错过了什么?请帮忙。我的目标是远程向应用程序设置一些键值。

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

5

这两篇文章应该会有所帮助,文章1文章2

Fred从这些文章中帮助我理解,但总结一下:

如果一个项目没有被托管配置提供程序明确设置,则该项目不会出现在Bundle中。空的但“非null”的bundle意味着托管配置提供程序没有设置任何内容。这里并不使用托管配置XML文件中的defaultValue。而且这个应用程序没有被主动管理。

要获得defaultValue,请使用RestrictionsManager.getManifestRestrictions()查询配置项的值。它返回所有限制条目对象的列表,因为它们在托管配置XML文件中被设置。这意味着该项的值是在XML文件中定义的defaultValue。


1
我也遇到了同样的问题。我们使用了一个Xamarin C#应用程序,并使用Play商店提供的公共谷歌测试应用程序“Test DPC”。它有一个“加载清单限制”的按钮,应该能够加载定义的应用程序限制(在我的情况下没有这样做)。
只有在以下情况下才有效:
1. 我没有调试应用程序(在那里使用DPC应用的值总是未定义/空),而是直接在设备上启动; 2. 在Test DPC应用程序中手动添加/设置键/值对。
然后我就可以通过DPC切换我的布尔值...(确保您在“管理应用程序”屏幕内按下“保存”按钮)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接