Kiosk mode in Android

android kiosk kiosk-mode

86604 просмотра

10 ответа

I'm in the process of evaluating if and how a CF .NET enterprise application can be ported to run on Android devices. The application on Windows Mobile phones are run in kiosk mode where the application autostart in fullscreen-mode after booting and with the users unable to accidentally or willingly access any other parts of the phone.

Is it possible on Android to have only one application autostart after booting and prevent users from accidentally (or willingly) access any other parts of the Android device?

Автор: Erik Источник Размещён: 12.11.2019 09:53

Ответы (10)


27 плюса

You can autostart applications on boot by listening to the android.intent.action.BOOT_COMPLETED intent in a BroadcastReceiver and start your Activity from there. In the Activity you can register yourself as the new default homescreen[1] and handle the keys.

Я думаю, что есть некоторые случаи, которые вы не можете обработать, не изменяя структуру (например, длительное нажатие на Home для отображения активных в данный момент приложений) - хотя я также могу ошибаться.

Но для прототипа этого может быть достаточно.

Повеселись, возиться!

[1]:

<intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.HOME" />
 <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Автор: Valentin Размещён: 15.01.2010 11:56

17 плюса

Вы можете настроить это (отключить доступ к меню, ограничить добавление приложения и т. Д.), Чтобы включить киоск. http://code.google.com/p/android-launcher-plus/

Автор: rbot Размещён: 25.04.2012 11:49

17 плюса

В новом Android L Preview Google объявил о блокировке задач , что и делает именно это. Однако, похоже, нужен root.

В L Developer Preview представлен новый API блокировки задач, который позволяет временно запретить пользователям покидать ваше приложение или прерываться уведомлениями. Это может быть использовано, например, если вы разрабатываете образовательное приложение для поддержки высоких требований к оценке на Android. Как только ваше приложение активирует этот режим, пользователи не смогут видеть уведомления, получать доступ к другим приложениям или возвращаться на главный экран, пока ваше приложение не выйдет из режима.

Чтобы предотвратить несанкционированное использование, только авторизованные приложения могут активировать блокировку задач. Кроме того, авторизация блокировки задач должна быть предоставлена ​​специально настроенным приложением для владельца устройства с помощью android.app.admin.DevicePolicyManager.setLockTaskComponents()метода.

Чтобы настроить владельца устройства, выполните следующие действия.

  • Подключите устройство, работающее под управлением Android, userdebugк своей машине для разработки.
  • Установите приложение владельца устройства.
  • Создайте device_owner.xmlфайл и сохраните его в /data/systemкаталоге на устройстве.
$ adb root
$ adb shell stop
$ rm /tmp/device_owner.xml
$ echo "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>" >> /tmp/device_owner.xml
$ echo "&device-owner package=\"<your_device_owner_package>\" name=\"*<your_organization_name>\" />" >> /tmp/device_owner.xml
$ adb push /tmp/device_owner.xml /data/system/device_owner.xml
$ adb reboot

Перед использованием API блокировки задач в своем приложении убедитесь, что ваша активность авторизована, вызвав DevicePolicyManager.isLockTaskPermitted ().

Чтобы активировать блокировку задач, позвоните android.app.Activity.startLockTask() из авторизованной деятельности.

Когда блокировка задачи активна, действует следующее поведение:

  • Строка состояния пуста, а пользовательские уведомления и информация о состоянии скрыты.
  • Кнопки «Домой» и «Последние приложения» скрыты.
  • Другие приложения могут не запускать новые действия.
  • Текущее приложение может начать новые действия, если это не создает новые задачи.
  • Пользователь остается заблокированным в вашем приложении до тех пор, пока не будет авторизована активность Activity.stopLockTask().
Автор: nhaarman Размещён: 02.07.2014 08:01

9 плюса

После некоторого поиска я нашел хорошее решение. Это работает только на рутованных устройствах, но я думаю, если это только для этого приложения, рутирование не должно быть проблемой.

  • Сделайте ваше приложение лаунчером, добавив

    <category android:name="android.intent.category.HOME" /> 
    

    к вашему намерению фильтр

  • Убедитесь, что ваше приложение сворачивает панель инструментов, чтобы вы не могли добраться до панели уведомлений. См. Как программно отключить строку состояния / панель уведомлений на Android? или http://blog.vogella.com/2011/02/28/android-hidding-the-status-and-title-bar/

  • Затем, чтобы остановить открытие других программ по ошибке, используйте службу специальных возможностей, чтобы проверить состояние окна «Изменено», сравните пакет с белым или черным списком и используйте ActivityManager.killBackgroundProcesses для завершения, если он не должен запускаться.

Также проверьте http://thebitplague.wordpress.com/2013/04/05/kiosk-mode-on-the-nexus-7/ для другого способа

Автор: matt_lethargic Размещён: 02.08.2013 12:15

4 плюса

Google недавно выпустила API-интерфейс управления Android, который позволяет легко настроить режим киоска для любых устройств Android под управлением Android 5.1 или более поздней версии, а также устанавливать различные другие политики.

Автор: Fred Размещён: 15.09.2017 07:38

3 плюса

Настройка одноцелевых устройств Страница Android-разработчика описала это, вы можете легко узнать больше вещей оттуда.

Теперь легко настроить Android 6.0 Marshmallow и более поздние устройства как корпоративные одноразовые (COSU) устройства.

Автор: Keyur Lakhani Размещён: 03.10.2016 12:46

2 плюса

Нашел другую возможную технику в этом сообщении на форуме . Цитирую этот пост:

http://www.basic4ppc.com/forum/basic4android-getting-started-tutorials/10839-android-kiosk-mode-tutorial.html

Используя следующие методы, вы можете создать приложение, которое не позволит «обычным» пользователям играть с чем-либо, кроме вашего приложения.

Приложение состоит из двух модулей. Основное направление деятельности и сервис. Служба настроена на запуск при загрузке. Когда служба запускается, она проверяет, запущено действие или нет. Если он не запущен, он использует таймер для запуска основной активности.

Когда действие приостановлено, оно планирует запуск службы за одну секунду: Код:

Sub Activity_Pause (UserClosed As Boolean)
    If kiosk Then StartServiceAt(KioskService, DateTime.Now + 1 * DateTime.TicksPerSecond, false)    
End Sub

Если пользователь нажимает на главном экране, домашний экран появится на несколько секунд. Однако ваше приложение вернется на фронт через несколько секунд, и пользователь не сможет взаимодействовать с другими приложениями или изменять настройки.

Сервис настроен на приоритетный сервис. Это препятствует тому, чтобы Android убил наш сервис. Нажмите на кнопку Стоп, чтобы отключить режим киоска.

Похоже, что в качестве примера можно загрузить ZIP-файл с кодом в режиме киоска .

Автор: Big Rich Размещён: 01.02.2012 10:06

2 плюса

Xposed Framework может сделать это. Ему нужен root, и есть вероятность, что он не будет работать на всех платформах. Ищите метод disable () в классе android.app.StatusBarManager .

Здесь, в исходном коде Android

Посмотрите здесь, как написать свой собственный модуль: руководство по разработке Xposed

Это гораздо проще, чем вы думаете на первый взгляд. Удачи!

Автор: JohnyTex Размещён: 20.08.2015 08:02

2 плюса

Запуск вашего приложения при загрузке

Лучший способ сделать это - установить приложение в качестве панели запуска.

<activity ...
  android:launchMode="singleInstance"
  android:windowActionBar="false">
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.HOME" />
      <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Блокировка вашего приложения

самый надежный способ - использовать устройство с Lollipop или выше и использовать

startLockTask

Сначала вы должны установить приложение в качестве владельца устройства. Обратите внимание, что ваше устройство должно быть без резервирования: если вы зарегистрировали его, вы должны сделать сброс настроек и пропустить регистрацию учетной записи.

чтобы иметь возможность зарегистрировать ваше приложение, вы должны сначала настроить компонент DeviceAdminReceiver:

package com.example.myapp;

public class MyDeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver {
    @Override
    public void onEnabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission received", Toast.LENGTH_SHORT).show();
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return "are you sure?";
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission revoked", Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onLockTaskModeExiting(Context context, Intent intent) {
        // here you must re-lock your app. make your activity know of this event and make it call startLockTask again!
    }
}

как только у вас есть непредоставленное устройство, вы можете запустить следующую команду из adb ( без рута )

adb shell dpm set-device-owner com.example.myapp/.MyDeviceAdminReceiver

чтобы Android не запрашивал разрешения пользователя на закрепление приложения, необходимо вызвать setLockTaskPackages

наконец-то!

@Override
public void onResume(){
    super.onResume();
    DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager) getSystemService(
            Context.DEVICE_POLICY_SERVICE);
    ComponentName mAdminComponentName = new ComponentName(getApplicationContext(), MyDeviceAdminReceiver.class);
    mDevicePolicyManager.setLockTaskPackages(mAdminComponentName, new String[]{getPackageName()});
    startLockTask();
}
@Override
public void finish(){
    stopLockTask();
    super.finish();
}
Автор: nonsensei Размещён: 27.07.2016 08:36

0 плюса

Наряду с настройкой приложения с помощью приемника BOOT и этого ответа для предотвращения расширения строки состояния, это решение работает на 4.4 и выше как полноценное приложение для киоска:

Поместите в свой onCreate ():

    final View view = (View) findViewById(android.R.id.content);
    if (view != null) {
        //"hides" back, home and return button on screen. 
        view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE |
                                   View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                   View.SYSTEM_UI_FLAG_IMMERSIVE |
                                   View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                                   View.SYSTEM_UI_FLAG_FULLSCREEN);
        view.setOnSystemUiVisibilityChangeListener
                (new View.OnSystemUiVisibilityChangeListener() {
                    @Override
                    public void onSystemUiVisibilityChange(int visibility) {
                        // Note that system bars will only be "visible" if none of the
                        // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
                        if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                            view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE |
                                    View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                    View.SYSTEM_UI_FLAG_IMMERSIVE |
                                    View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                                    View.SYSTEM_UI_FLAG_FULLSCREEN);
                        }
                    }
                });
    }

Это позволит полностью скрыть кнопку «Назад», приложения и кнопку «Домой».

Автор: Kristy Welsh Размещён: 25.03.2016 06:05
Вопросы из категории :
32x32