RestrictionManager getRestrictions()始终为空

时间:2016-10-30 09:35:25

标签: android mdm mobileiron android-restrictions

我尝试使用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 个答案:

答案 0 :(得分:3)

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

在未经验证的设备上测试应用限制的最简单方法是从Google Play商店下载测试DPC应用。设置它将加密您的设备并安装可用于测试的工作资料。您可以使用DPC应用程序模拟应用应用程序限制,从清单中读取限制以及EMM执行的许多其他操作。您可以使用adb或按照开发人员指南在工作资料中安装您的应用,告诉Android Studio如何在您的工作资料中运行该应用。

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

答案 1 :(得分:2)

这两个帖子应该有助post1post2

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

如果某个项尚未由托管配置提供程序显式设置,则该项不在Bundle中。空的,但是&#34;不是空的&#34; bundle只意味着托管配置提供程序没有设置任何内容。此处未使用托管配置XML文件中的defaultValue。并且应用程序没有被主动管理。

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

答案 2 :(得分:1)

我遇到了同样的问题。我们已经使用Xamarin csharp应用程序进行了测试,使用了公共谷歌测试应用程序&#34;测试DPC&#34;可通过Play商店购买。它有一个按钮&#34;加载清单限制&#34;应该能够加载定义的应用程序限制(在我的情况下,它没有)。 它只能起作用,如果:

  1. 我没有调试应用程序(在DPC中应用的值总是没有定义/为空),而是直接在设备上启动,
  2. 在Test DPC应用程序中手动添加/设置键/值对。
  3. 然后我从DPC中切换了我的布尔值...(确保你按下&#34;保存&#34;在&#34;管理应用程序&#34;屏幕内)