RestrictionManager getRestrictions() всегда пуст

Я пытаюсь настроить удаленную настройку для моего приложения с помощью 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 ответа

Решение

Если вы вообще не получаете никаких ограничений, возможно, это связано с тем, что ваше приложение не является частью управляемого профиля. Ограничения приложения работают только в двух сценариях... ваше устройство было подготовлено с помощью консоли EMM (это можно сделать только после сброса настроек), или ваше устройство имеет профиль Android for Work, который управляется вашей консолью EMM. На самом деле вам не нужно объявлять каждое ограничение в манифесте, это только позволяет EMM предоставлять эту информацию в их консоли.

Самый простой способ проверить ограничения вашего приложения на неподготовленном устройстве - это загрузить приложение Test DPC из магазина Google Play. При его настройке устройство зашифровывается и устанавливается рабочий профиль, который вы можете использовать для тестирования. Вы можете использовать приложение DPC для имитации применения ограничений приложения, чтения ограничений из манифеста и ряда других действий EMM. Вы можете установить свое приложение в рабочем профиле, используя adb или следуя руководству разработчика, чтобы сообщить Android Studio, как запустить приложение в своем рабочем профиле.

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

Эти два поста должны помочь post1 и post2.

Фред помог мне понять из этих постов, но подвести итог:

Если элемент не был явно установлен поставщиком управляемых конфигураций, то этот элемент не будет в комплекте. Пустой, но не нулевой комплект означает, что поставщик управляемых конфигураций ничего не установил. Значение по умолчанию в XML-файле управляемых конфигураций здесь не используется. И приложение активно не управляется.

Чтобы получить defaultValue, запросите значение элемента конфигурации с помощью этого RestrictionsManager.getManifestRestrictions(). Он возвращает список всех объектов RestrictionEntry, как они заданы в XML-файле управляемой конфигурации. Это означает, что значением элемента является defaultValue, как определено в файле XML.

У меня такая же проблема. Мы протестировали приложение Xamarin csharp, использовали общедоступное тестовое приложение Google "Test DPC", доступное в Play Store. Он имеет кнопку "Загрузить ограничения манифеста", которая должна иметь возможность загружать определенные ограничения приложения (в любом случае это не так). Это сработало только, если:

  1. Я НЕ отлаживал приложение (там значения, применяемые с помощью DPC, всегда не определены / пустые), но запускались непосредственно на устройстве, и
  2. добавьте / установите пары ключ / значение вручную в приложении Test DPC.

Затем я переключил мои логические значения из DPC... (убедитесь, что вы нажали "Сохранить" на экране "Управление приложениями")

Другие вопросы по тегам