RestrictionManager getRestrictions() 始终为空
RestrictionManager getRestrictions() is always empty
我正在尝试使用 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 配置设置了值)?尝试了几种设备。我错过了什么?请帮忙。我的目标是远程设置应用程序的一些键值。
我遇到了同样的问题。我们已经使用 Xamarin csharp 应用程序进行了测试,使用了可通过 Play 商店获得的 public google 测试应用程序 "Test DPC"。它有一个按钮 "Load manifest restrictions" 应该能够加载定义的应用程序限制(无论如何在我的情况下它没有)。
仅在以下情况下有效:
- 我没有调试应用程序(DPC 应用的值始终不是 defined/empty),而是直接在设备上启动,并且
- add/set key/value 在 Test DPC 应用程序中手动配对。
然后我从 DPC 中切换了我的布尔值...(确保您在 "Manage applications" 屏幕中按了 "Save")
如果您根本没有收到任何限制,那可能是因为您的应用不是托管配置文件的一部分。应用限制仅在两种情况下有效...您的设备已使用 EMM 控制台配置(只能在恢复出厂设置后完成)或您的设备具有由 EMM 控制台管理的 Android 工作配置文件。您实际上不需要在清单中声明每个限制,这只允许 EMM 在其控制台中提供该信息。
在未配置的设备上测试应用限制的最简单方法是从 google Play 商店下载测试 DPC 应用。设置它会加密您的设备并安装可用于测试的工作配置文件。您可以使用 DPC 应用模拟应用应用限制、从清单中读取限制以及 EMM 执行的许多其他操作。您可以使用 adb 或按照开发人员指南将您的应用安装到工作配置文件中,以告知 Android Studio 如何 运行 您的工作配置文件中的应用。
这两个帖子应该会有所帮助 and 。
Fred 帮助我从这些帖子中理解,但总结一下:
如果托管配置提供程序未明确设置某个项目,则该项目将不在捆绑包中。一个空的但 "not null" 的包只意味着托管配置提供者没有设置任何内容。此处未使用托管配置 XML 文件中的默认值。并且该应用未受到主动管理。
要获取默认值,请使用此 RestrictionsManager.getManifestRestrictions() 查询配置项的值。它 returns 所有 RestrictionEntry 对象的列表,因为它们在托管配置 XML 文件中设置。这意味着该项目的值是 XML 文件中定义的默认值。
我正在尝试使用 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 配置设置了值)?尝试了几种设备。我错过了什么?请帮忙。我的目标是远程设置应用程序的一些键值。
我遇到了同样的问题。我们已经使用 Xamarin csharp 应用程序进行了测试,使用了可通过 Play 商店获得的 public google 测试应用程序 "Test DPC"。它有一个按钮 "Load manifest restrictions" 应该能够加载定义的应用程序限制(无论如何在我的情况下它没有)。 仅在以下情况下有效:
- 我没有调试应用程序(DPC 应用的值始终不是 defined/empty),而是直接在设备上启动,并且
- add/set key/value 在 Test DPC 应用程序中手动配对。
然后我从 DPC 中切换了我的布尔值...(确保您在 "Manage applications" 屏幕中按了 "Save")
如果您根本没有收到任何限制,那可能是因为您的应用不是托管配置文件的一部分。应用限制仅在两种情况下有效...您的设备已使用 EMM 控制台配置(只能在恢复出厂设置后完成)或您的设备具有由 EMM 控制台管理的 Android 工作配置文件。您实际上不需要在清单中声明每个限制,这只允许 EMM 在其控制台中提供该信息。
在未配置的设备上测试应用限制的最简单方法是从 google Play 商店下载测试 DPC 应用。设置它会加密您的设备并安装可用于测试的工作配置文件。您可以使用 DPC 应用模拟应用应用限制、从清单中读取限制以及 EMM 执行的许多其他操作。您可以使用 adb 或按照开发人员指南将您的应用安装到工作配置文件中,以告知 Android Studio 如何 运行 您的工作配置文件中的应用。
这两个帖子应该会有所帮助
Fred 帮助我从这些帖子中理解,但总结一下:
如果托管配置提供程序未明确设置某个项目,则该项目将不在捆绑包中。一个空的但 "not null" 的包只意味着托管配置提供者没有设置任何内容。此处未使用托管配置 XML 文件中的默认值。并且该应用未受到主动管理。
要获取默认值,请使用此 RestrictionsManager.getManifestRestrictions() 查询配置项的值。它 returns 所有 RestrictionEntry 对象的列表,因为它们在托管配置 XML 文件中设置。这意味着该项目的值是 XML 文件中定义的默认值。