Возможности библиотеки

  • Определение, запущено ли Android-приложение на устройстве под управлением Headwind MDM
  • Получение настроек приложения с сервера по ID устройства
  • Отправка журналов на сервер (правила отправки журналов настраиваются на сервере по ID устройства)
  • Получение Push-уведомлений, отправляемых серверными плагинами

Список классов

Пример кода

Интеграция

Для подключения библиотеки в ваше приложение, вам нужно:

  1. Загрузить последнюю версию библиотеки Headwind MDM hmdm-X.X.X.aar и скопировать ее в ваш проект в поддиректорию libs
  2. Добавить строку в build.gradle (уровень модуля):
    implementation files('libs/hmdm-1.1.3.aar')
    (при необходимости замените номер версии на последнюю версию библиотеки).
  3. Добавить возможность взаимодействия с приложением Headwind MDM package в AndroidManifest.xml внутри тега <manifest>:
        <queries>
            <package android:name="com.hmdm.launcher" />
        </queries>  

HeadwindMDM

class com.hmdm.HeadwindMDM
Добавлен в 1.1.0
Класс, упрощающий интеграцию с сервисом Headwind MDM. Этот класс инкапсулирует автоматическое соединение с сервисом при его потере, а также уведомляет ваше приложение об изменениях конфигурации
Методы
HeadwindMDM
getInstance()
Получить экземпляр объекта HeadwindMDM
int
getVersion()
Получить версию API, поддерживаемую приложением MDM (1.1.3 = 113, или 0 для более ранних версий)
void
setApiKey(String apiKey)
Задать ключ API, требуемый для привилегированных операций, таких, как getImei() и getSerial()
boolean
connect(Context context, HeadwindMDM.EventHandler handler)
Подключиться к сервису Headwind MDM и указать обработчик событий. Возвращает true при успехе и false при ошибке (обычно, если приложение запущено вне среды Headwind MDM)
void
disconnect(Context context)
Отключиться от сервиса Headwind MDM
boolean
isConnected()
Проверяет статус соединения с сервисом. Если true — можно пользоваться функциями библиотеки.
String
getServerHost()
Получить имя хоста, на котором установлен сервер Headwind MDM
String
getSecondaryServerHost()
Получить резервное имя хоста, на котором установлен сервер Headwind MDM
String
getServerPath()
Получить путь, по которому доступен Headwind MDM
String
getServerUrl()
Получить URL, по которому доступен Headwind MDM
String
getSecondaryServerUrl()
Получить резервный URL, по которому доступен Headwind MDM
String
getDeviceId()
Получить ID устройства
String
getCustom(int number)
Получить кастомную переменную, определенную на сервере (number — число от 1 до 3)
boolean
isManaged()
Находится ли устройство в управляемом режиме (назначен Device Owner)
boolean
isKiosk()
Находится ли устройство в режиме киоска
String
getImei()
Получить IMEI устройства (привилегированная операция, требующая ключа API)
String
getSerial()
Получить серийный номер устройства (привилегированная операция, требующая ключа API)
boolean
setCustom(int number, String value)
Установить значение кастомной переменной для передачи на сервер

HeadwindMDM.EventHandler

interface com.hmdm.HeadwindMDM.EventHandler
Добавлен в 1.1.0
Интерфейс, получающий события из сервиса Headwind MDM
Методы
void
onHeadwindMDMConnected()
Вызывается после успешного установления соединения. В этом методе обычно выполняется код получения настроек приложения с сервера.
void
onHeadwindMDMDisconnected()
Вызывается при разрыве соединения с сервисом. Это информационный метод, не требующий действий. Как правило, после вызова этого метода, через несколько секунд последует вызов onHeadwindMDMConnected().
void
onHeadwindMDMConfigChanged()
Вызывается в случае, если сервер изменил настройки. В этом методе следует выполнить код получения настроек приложения с сервера.

MDMError

class com.hmdm.MDMError
Добавлен в 1.0.1
Класс ошибки Headwind MDM, используемый в качестве описания ошибки в MDMException.
Константы
int
NO_ERROR = 0
int
ERROR_NO_MDM = 1
Приложение запущено вне системы Headwind MDM
int
ERROR_INTERNAL = 2
Внутренняя ошибка лаунчера
int
ERROR_GENERAL = 3
Ошибка библиотеки Headwind MDM
int
ERROR_DISCONNECTED = 4
Сервис Headwind MDM отключился
int
ERROR_INVALID_PARAMETER = 5
Метод получил неверный параметр
int
ERROR_VERSION = 6
Лаунчер не поддерживает метод API и требует обновления
int
ERROR_KEY_NOT_MATCH = 7
Неверный ключ API
Конструкторы
MDMError()
Создает пустой объект (code = 0)
MDMError(int code)
Создает ошибку с заданным кодом
Поля
int
code
Код ошибки
Методы
static String
getMessage(int code)
Получить текст ошибки по коду
String
getMessage()
Получить текст ошибки данного экземпляра класса

MDMException

class com.hmdm.MDMException
Добавлен в 1.0.1
Исключение, возникающее в методах библиотеки
Конструкторы
MDMException(int code)
Исключение с заданным кодом ошибки (без комментария)
MDMException(int code, String comment)
Исключение с заданным кодом ошибки и комментарием
Поля
MDMError
mdmError
Код ошибки
String
comment
Дополнительные данные (комментарий)

MDMPushHandler

abstract class com.hmdm.MDMPushHandler
Добавлен в 1.0.3
Вспомогательный класс, позволяющий мобильному приложению получать Push-сообщения, отправляемые плагинами с сервера. Это абстрактный класс, собственную реализацию которого вы должны сделать в вашем приложении.
Методы
abstract void
onMessageReceived(MDMPushMessage message)
Вызывается при получении Push-сообщения
void
register(String messageType, Context context)
Регистрирует обработчик, ожидающий сообщений заданного типа
void
register(String[] messageTypes, Context context)
Регистрирует обработчик, ожидающий сообщений нескольких заданных типов
void
unregister(Context context)
Отменяет регистрацию обработчика

MDMPushMessage

class com.hmdm.MDMPushMessage
Добавлен в 1.0.3
Push-сообщение, отправляемое приложению со стороны серверного плагина
Константы
String
MessageConfigUpdated
Встроенный тип сообщения, отправляемый при обновлении конфигурации Headwind MDM на сервере
Методы
String
getType()
Получить тип сообщения
void
setType(String type)
Установить тип сообщения
org.json.JSONObject
getData()
Получить данные сообщения
void
setData(org.json.JSONObject data)
Установить данные сообщения

MDMService

class com.hmdm.MDMService
Добавлен в 1.0.1
Основной класс, используемый для соединения мобильного приложения с сервисом Headwind MDM.
Константы
String
KEY_SERVER_HOST
Запросить доменное имя сервера (включая протокол)
String
KEY_SECONDARY_SERVER_HOST
Запросить доменное имя резервного сервера (включая протокол)
String
KEY_SERVER_PATH
Запросить путь к панели управления (пустое значение, если развернуто в корне)
String
KEY_DEVICE_ID
Запросить ID устройства
Методы
MDMService
getInstance()
Получить экземпляр объекта MDMService
int
getVersion()
Получить версию API, поддерживаемую приложением MDM (1.1.3 = 113, или 0 для более ранних версий)
boolean
connect(Context context, MDMService.ResultHandler handler)
Соединиться с сервисом Headwind MDM и уведомить обработчик о факте соединения. Возвращает true при успехе и false при ошибке (обычно, если приложение запущено вне среды Headwind MDM)
Bundle
queryConfig() throws MDMException
Получить конфигурацию с сервера (для получения параметров нужно получать из Bundle атрибуты, соответствующие KEY_… константам)
Bundle
queryConfig(String apiKey) throws MDMException
Получить конфигурацию с сервера, включая привилегированные параметры (для получения параметров нужно получать из Bundle атрибуты, соответствующие KEY_… константам)
boolean
setCustom(int number, String value)
Установить значение кастомной переменной для передачи на сервер

MDMService.ResultHandler

interface com.hmdm.MDMService.ResultHandler
Добавлен в 1.0.1
Интерфейс, получающий результат соединения с сервисом Headwind MDM
Методы
void
onMDMConnected()
Вызывается после успешного установления соединения
void
onMDMDisconnected()
Вызывается при разрыве соединения с сервисом (обычно в случае обновления или аварийного завершения лаунчера Headwind MDM). После получения этого сигнала, рекомендуется заново подключиться к сервису после прошествия нескольких секунд.

MDMService.Log

static class com.hmdm.MDMService.Log
Добавлен в 1.0.1
Класс, отправляющий журналы приложения на сервер. Этот класс имеет интерфейс, аналогичный android.util.Log, поэтому вы можете легко заменить движок журналов без просмотра и обновления всего кода приложения.
Константы
int
ERROR = 1
int
WARN = 2
int
INFO = 3
int
DEBUG = 4
int
VERBOSE = 5
Методы
void
log(int level, String tag, String message)
Отправка лога заданного уровня на сервер
void
v(String tag, String message)
void
d(String tag, String message)
void
i(String tag, String message)
void
w(String tag, String message)
void
e(String tag, String message)
Эти методы аналогичны методам android.util.Log. Они пишут сообщение во внутренний лог Android (logcat) и передают сообщение на сервер.

MDMService.Preferences

static class com.hmdm.MDMService.Preferences
Добавлен в 1.0.4
Этот класс используется для получения настроек приложения с сервера (массовая конфигурация Android-приложений). Функция централизованного хранения настроек приложений на сервере пока не реализована.
Методы
String
get(String attr, String defValue)
Получить атрибут, определенный во вкладке «Настройки приложений» конфигурации.
boolean
set(String attr, String value)
Установить атрибут (пока не реализовано)
void
apply()
Сохранить конфигурацию на сервере (пока не реализовано)

Примеры кода

Версия 1.1.0 и выше

Чтобы включить функции Headwind MDM в ваше Android-приложение, используйте в качестве примера следующий код:

public class MainActivity extends AppCompatActivity implements HeadwindMDM.EventHandler {
    ...
    private HeadwindMDM headwindMDM;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        headwindMDM = HeadwindMDM.getInstance();
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        ...
        if (!headwindMDM.isConnected()) {
            if (!headwindMDM.connect(this, this)) {
                // Ошибка соединения с Headwind MDM, скорее всего приложение запущено вне среды Headwind MDM
            }
        }
    }
 
    @Override
    protected void onDestroy() {
        headwindMDM.disconnect(this);
        super.onDestroy();
    }
 
    @Override
    public void onHeadwindMDMConnected() {
        // Подключились к Headwind MDM, теперь можно получить настройки и выполнить другие функции , относящиеся к MDM
        loadSettings();
    }
 
    @Override
    public void onHeadwindMDMDisconnected() {
    }
 
    @Override
    public void onHeadwindMDMConfigChanged() {
        // Настройки на сервере изменились, нужно их обновить в приложении
        loadSettings();
    }

    // Получение настроек приложения с сервера
    private void loadSettings() {
        String someSetting = MDMService.Preferences.get("some_setting", getString(R.string.default_setting));
    }
}

Версии библиотеки до 1.1.0

В этом коде требуется вручную реализовать повторное подключение в случае разрыва соединения с сервисом (например, в случае обновления лаунчера Headwind MDM).

public class MainActivity extends AppCompatActivity implements MDMService.ResultHandler {
    ...
    private MDMService mdmService;
    private boolean mdmConnected = false;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        mdmService = MDMService.getInstance();
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        ...
        if (mdmConnected) {
            // Если мы уже соединены с Headwind MDM, загрузим настройки MDM и выполним здесь другие функции, относящиеся к MDM
            String someSetting = MDMService.Preferences.get("some_setting", getString(R.string.default_setting));
        } else {
            if (!mdmService.connect(this, this)) {
                // Ошибка соединения с Headwind MDM, скорее всего приложение запущено вне среды Headwind MDM
            }
        }
    }
 
    @Override
    public void onMDMConnected() {
        mdmConnected = true;
        // Подключились к Headwind MDM, теперь можно получить настройки и выполнить другие функции , относящиеся к MDM
        String someSetting = MDMService.Preferences.get("some_setting", getString(R.string.default_setting));
    }
 
    @Override
    public void onMDMDisconnected() {
        mdmConnected = false;
        // Повтор соединения через 5 секунд (сюда попадаем после обновления или аварийного завершения лаунчера)
        new Handler().postDelayed(new MDMReconnectRunnable(), 5000);
    }
 
    public class MDMReconnectRunnable implements Runnable {
        @Override
        public void run() {
            if (!mdmService.connect(MainActivity.this, MainActivity.this)) {
                // Повтор через 1 минуту
                new Handler().postDelayed(this, 60000);
            }
        }
    }
}