Как запустить приложение Android в режиме киоска, отключить безопасный режим и не допустить его от Hard Reset?

Как запустить приложение Android в режиме киоска, отключить безопасный режим и не допустить его от Hard Reset?

У меня есть следующие 3 требования для моего приложения:

  • Показывать только определенные приложения для школьников в обычном режиме устройства. Это можно сделать, отключив пусковую установку по умолчанию и включив киоск-пуск.

  • Отключите или установите пароль в безопасном режиме, чтобы избежать использования системных приложений или встроенных приложений (YouTube, видеоплеер, музыкальное приложение и т.д.).

  • Ограничьте жесткий reset устройства, отключив длительное нажатие жестких клавиш (кнопка питания, кнопки регулировки громкости) устройства.

Я интерпретировал эти требования и придумал ниже подробное понимание.

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

  • Мы можем отключить безопасный доступ к системе или сторонним приложениям через приложение AppLock или аналогичные другие приложения. Он будет работать только до Android Marshmallow 6.0. Но есть ограничение на Android, которое не работает на устройствах Nougat/Oreo. В качестве альтернативы мы пытались использовать нажатие кнопки кнопки питания для предотвращения перехода устройства в безопасный режим. Но Android не разрешает доступ или прослушивание нажатия клавиши питания из нашего приложения в соответствии с эта ссылка и другие.

ВАЖНОЕ ЗАМЕЧАНИЕ ДЛЯ ANDROID 7.0 (NOUGAT) И 8.0 (OREO) - ссылка здесь

В соответствии с приложение MMGuardian, в настоящий момент блокировка безопасного режима не может быть включена для телефонов, работающих на Android 7.0 или 8.0. Если более старый телефон, для которого ранее был включен блокировка безопасного режима, обновляется до этих версий Android, функция блокировки безопасного режима будет отключена.

  1. Мы не можем помешать любому устройству с жестким reset, поскольку он в основном выполняется после выключения телефона, оставляя приложения без контроля. Но есть и дорогая альтернатива. Мы можем использовать устройство COSU и разрабатывать специальную прошивку. Более подробную информацию о COSU можно найти по ссылкам ниже. https://developer.android.com/work/cosu.html https://developers.google.com/android/work/requirements/cosu

Может кто-нибудь помочь мне добавить к нему больше мыслей, чтобы я мог лучше понять эту ситуацию?

Я иду в правильном направлении? или Я правильно его описал?

Ответ 1

Взгляните на Android Management API, кажется, что больше не может быть выполнено без встроенного программного обеспечения устройства.

Ответ 2

Режим киоска 100% невозможен.

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

У меня было решение, но работает только если устройство рутировано

Ограничить аппаратный сброс: скопируйте файл apk в систему/приложение, после восстановления устройства Android автоматически переустановит все приложения из папки система/приложение.

Отключить системное приложение: чтобы отключить системные приложения или любые приложения, выполните команду оболочки

pm disable <package name>


Интерпретировать ключи тома: для запуска вам не нужен root-доступ, используйте этот код в вашем классе деятельности

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    // TODO Auto-generated method stub
    if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN))
    {
        // Do what ever you want
    }
    if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP))
    {
        // Do what ever you want
    }
    return true;
}

Бонус отключить панель навигации и строку состояния
Прятаться

 private void hideNavigationBar(){
    try {
        Process process = Runtime.getRuntime().exec("su");
        DataOutputStream os = new DataOutputStream(process.getOutputStream());
        os.writeBytes("pm disable com.android.systemui\n");
        os.flush();
        try {
        Process process = null;
        process = Runtime.getRuntime().exec("su");
        DataOutputStream osReboot = new DataOutputStream(process.getOutputStream());
        osReboot.writeBytes("reboot\n");
        osReboot.flush();
        process.waitFor();
            } 
            catch (IOException e) {
                e.printStackTrace();
            } 
            catch (InterruptedException e) {
                e.printStackTrace();
            }

    }catch (IOException e) {
        e.printStackTrace();
    }
}

Восстановить в нормальном состоянии

private void showNavigationBar(){
    try {
        Process process = Runtime.getRuntime().exec("su");
        DataOutputStream os = new DataOutputStream(process.getOutputStream());
        os.writeBytes("pm enable com.android.systemui\n");
        os.flush();
        os.writeBytes("reboot\n");
        os.flush();
        process.waitFor();

    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Примечание: устройство перезагрузится после запуска команд оболочки

Ваша игра с рутом, так что вы и ваши собственные, Если есть сомнения, пожалуйста, введите команду, прежде чем начать кодирование

Ответ 3

Можете ли вы спроектировать, а затем развернуть свое приложение как DeviceOwner? Это дает вам наибольшие возможности на устройстве, но развертывание может быть болезненным в зависимости от контекста: не подходит для публичного выпуска, но возможно, если вы можете управлять флотом устройств.