<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Davran Khasanov</title>
    <description>The latest articles on DEV Community by Davran Khasanov (@davran0110).</description>
    <link>https://dev.to/davran0110</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3904642%2F889a73b3-e186-4fb9-ba34-6bb2389ce518.png</url>
      <title>DEV Community: Davran Khasanov</title>
      <link>https://dev.to/davran0110</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/davran0110"/>
    <language>en</language>
    <item>
      <title>Разработка Android Kiosk приложения</title>
      <dc:creator>Davran Khasanov</dc:creator>
      <pubDate>Sat, 23 May 2026 18:16:42 +0000</pubDate>
      <link>https://dev.to/davran0110/razrabotka-android-kiosk-prilozhieniia-2o80</link>
      <guid>https://dev.to/davran0110/razrabotka-android-kiosk-prilozhieniia-2o80</guid>
      <description>&lt;p&gt;Всем привет это моя первая публикация. И первый опыт написания статей по разработке.&lt;/p&gt;

&lt;p&gt;Давайте начнем с небольшого знакомства.&lt;br&gt;
Меня зовут Давран, я андройд разработчик с 8 летнем стажем разработки мобильных приложений разного спектра.&lt;/p&gt;

&lt;p&gt;Мой опыт работы:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffq0xylf4r2fgdha5vxbr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffq0xylf4r2fgdha5vxbr.png" alt=" " width="800" height="841"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Сегодня я хотел начать свое повествование с темы Android Kiosk.&lt;/p&gt;

&lt;p&gt;На первый взгляд kiosk приложение на Android - это что то простое: нужно просто "залочить" пользователя внутри одного экрана.&lt;/p&gt;

&lt;p&gt;На практике все оказалось немного сложнее.&lt;/p&gt;

&lt;p&gt;В рамках нашего проекта Pai, я занимался разработкой приложения под планшет, а так же написанием лаунчера(как в итоге оказалось не совсем лаунчером)&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Что такое киоск *&lt;/em&gt;&lt;br&gt;
Kiosk-приложение - &lt;em&gt;это приложение с ограниченным доступом в котором пользователь не может выйти за пределы одного приложения.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Такие решения используется в терминалах, POS системах инфокиосках и устройствах самообслуживания.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Требования&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;На старте требования казались простыми, у меня был небольшой опыт написания лаунчера под android, и я думал что этих знаний и каких нибудь pet проектов на гитхабе хватит для решения задачи.&lt;br&gt;
Но у меня было много вопросов которые направили меня на поиск документации для этой области(&lt;a href="https://developer.android.com/work/dpc/dedicated-devices?hl=ru" rel="noopener noreferrer"&gt;ссылка&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Итого нам нужно чтобы: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Пользователь не смог выйти из приложения&lt;/li&gt;
&lt;li&gt;Приложение должно запускаться автоматически при включении устройства&lt;/li&gt;
&lt;li&gt;Нельзя давать доступ к системным настройкам и UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Реализация&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Все что мне потребовалось это немного документации,&lt;br&gt;
пару снипетов кода.&lt;/p&gt;

&lt;p&gt;За основу решения были взяты Device Owner и Lock Task Mode.&lt;/p&gt;

&lt;p&gt;Ну что же, теперь перейдем непосредственно к коду и реализации...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kiosk Controller&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Первым делом нам предстоит ознакомиться с &lt;a href="https://developer.android.com/reference/android/app/admin/DevicePolicyManager" rel="noopener noreferrer"&gt;DevicePolicyManager API&lt;/a&gt;&lt;br&gt;
если в двух словах то это API для администратора устройства которое позволяет нам много вещей(управление приложениями, управление настройками девайса и прочие вещи)&lt;br&gt;
но для этого нам нужно одно из двух, либо нужные пермишины либо же админ права(это не есть рут устройства)&lt;/p&gt;

&lt;p&gt;Дальше нам предстоит ознакомиться с &lt;a href="https://developer.android.com/reference/android/app/KeyguardManager" rel="noopener noreferrer"&gt;KeyguardManager API&lt;/a&gt;&lt;br&gt;
это API нужно нам для работы с лок скрином девайса а точнее для прослушивание его стейтов.&lt;/p&gt;

&lt;p&gt;И так же нам нужно создать &lt;a href="https://developer.android.com/reference/android/app/admin/DeviceAdminReceiver" rel="noopener noreferrer"&gt;DeviceAdminReceiver&lt;/a&gt; для получения установленных настроек в наше приложение&lt;/p&gt;

&lt;p&gt;1 - Нам нужно создать white list приложений которые можно будет запускать в режиме киоска поэтому мы создадим массив названия пакетов:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;WHITE_LIST_PACKAGES&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;arrayOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"your.package.name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;"dev.firebase.appdistribution"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;"com.android.settings"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2 - Мы создаем класс KioskController и создаем ссылки на системные сервисы&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt; &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;dpm&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getSystemService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;DevicePolicyManager&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;keyguard&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getSystemService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;KeyguardManager&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;admin&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ComponentName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;AdminReceiver&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3 - Основную работу будет делать нам DevicePolicyManager&lt;br&gt;
и первая магическая строчка это&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;dpm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setLockTaskPackages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;arrayOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;WHITE_LIST_PACKAGES&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;данная команда отдает системе белый список приложений которые можно будет открыть в режиме киоска&lt;/p&gt;

&lt;p&gt;вторая магичечская строчка&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;dpm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setLockTaskFeatures&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;DevicePolicyManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LOCK_TASK_FEATURE_NONE&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;данная команда отключает все настраиваемые элементы с UI в режиме киоска(статус бар,навигационный бар, одним словом у вас в киоск режиме отключается весь внешний UI системы)&lt;/p&gt;

&lt;p&gt;из минусов я нашел только вновь кривой API, так как флаг &lt;br&gt;
DevicePolicyManager.LOCK_TASK_FEATURE_NONE выключает все &lt;br&gt;
но нет флажка включить все, поэтому придется использовать комбинацию флажков чтобы вернуться с режима киоска&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;dpm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setLockTaskFeatures&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nc"&gt;DevicePolicyManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LOCK_TASK_FEATURE_HOME&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt;
                &lt;span class="nc"&gt;DevicePolicyManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LOCK_TASK_FEATURE_OVERVIEW&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt;
                &lt;span class="nc"&gt;DevicePolicyManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LOCK_TASK_FEATURE_NOTIFICATIONS&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt;
                &lt;span class="nc"&gt;DevicePolicyManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LOCK_TASK_FEATURE_GLOBAL_ACTIONS&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;и на выходе у нас получаются две функции&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt; &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;enterAdminMode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="nf"&gt;isDeviceOwner&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;
        &lt;span class="n"&gt;dpm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setLockTaskFeatures&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nc"&gt;DevicePolicyManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LOCK_TASK_FEATURE_HOME&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt;
                &lt;span class="nc"&gt;DevicePolicyManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LOCK_TASK_FEATURE_OVERVIEW&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt;
                &lt;span class="nc"&gt;DevicePolicyManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LOCK_TASK_FEATURE_NOTIFICATIONS&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt;
                &lt;span class="nc"&gt;DevicePolicyManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LOCK_TASK_FEATURE_GLOBAL_ACTIONS&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;exitAdminMode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="nf"&gt;isDeviceOwner&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;

        &lt;span class="n"&gt;dpm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setLockTaskFeatures&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;DevicePolicyManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LOCK_TASK_FEATURE_NONE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;есть еще вспомогательные&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;canStartLockTask&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="nf"&gt;isDeviceOwner&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;dpm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isLockTaskPermitted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;packageName&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="n"&gt;keyguard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isDeviceLocked&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;isLockTaskPermitted - это проверка на на наличие прав у приложение переходить в режим киоска.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;isDeviceOwner&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dpm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isDeviceOwnerApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;packageName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Проверка на наличие прав админа устройства&lt;/p&gt;

&lt;p&gt;Так же у DevicePolicyManager есть функция addRestriction&lt;br&gt;
которая позволяет выключить ту или иную вещь на девайсе:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Сейф бут&lt;/li&gt;
&lt;li&gt;сброс заводских настроек&lt;/li&gt;
&lt;li&gt;подключение внешних юсб &lt;/li&gt;
&lt;li&gt;добавление аккаунтов на устройство&lt;/li&gt;
&lt;li&gt;настройки блютуза
и еще много чего.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;переменная admin - это &lt;a href="https://developer.android.com/reference/android/app/admin/DeviceAdminReceiver" rel="noopener noreferrer"&gt;DeviceAdminReceiver&lt;/a&gt;&lt;br&gt;
который помогает системе определить куда вести все эти настройки в действие.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Установка приложения *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;На этом создание контролера завершено, далее нам нужно сбросить девайс до заводских настроек, включить USB debugging, разрешить установку через USB и не создавать и не авторизовываться ни под каким аккаунтом на устройстве.&lt;/p&gt;

&lt;p&gt;Мы ставим наше приложение на устройство, открываем терминал и выполняем команду &lt;/p&gt;

&lt;p&gt;Установка девайс овнера&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;adb shell dpm set-device-owner &lt;span class="s2"&gt;"your.package.name/com.example.AdminReceiver
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Удаление девайс овнера&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;adb shell dpm remove-active-admin &lt;span class="s2"&gt;"your.package.name/com.example.AdminReceiver
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;и указываем путь до нашего AdminReceiver(это DeviceAdminReceiver который мы создали в KioskController)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AdminReceiver&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;DeviceAdminReceiver&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;На этом нам осталось лишь установить наше приложение как домашний лаунчер устройства и поздравляю вас, вы теперь админ устройства в режиме киоска.&lt;/p&gt;

&lt;p&gt;P.S - я использовал SingleActivity архитектуру для того чтобы добавить скрытую кнопку которая позволит открыть AdminScreen&lt;br&gt;
ввести пин код админа и выйти с режима киоска для конфигурации планшета.&lt;/p&gt;

&lt;p&gt;Если хотите могу эту часть тоже описать.&lt;/p&gt;

</description>
      <category>android</category>
      <category>devjournal</category>
      <category>mobile</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
