Как запретить пользователю доступ к панели навигации [Устройство PAX]

В настоящее время я работаю над приложением Android Launcher для устройства PAX.

минSDK: 25
Тема: Theme.Material3.DayNight.NoActionBar Манифест:

<activity
            android:name = ".MainActivity"
            android:exported = "true"
            android:launchMode = "singleTask"
            android:theme = "@style/Theme.ThemeName">
            <intent-filter>
                <action android:name = "android.intent.action.MAIN" />
                <category android:name = "android.intent.category.DEFAULT" />
                <category android:name = "android.intent.category.HOME" />
                <category android:name = "android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Я хочу убедиться, что пользователь не сможет покинуть приложение запуска.

Я попробовал установить флаги на своем MainActivity, основываясь на соответствующем вопросе: полноэкранное приложение для Android

View decorView = getWindow().getDecorView();

        final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

        decorView.setSystemUiVisibility(flags);

Я также попробовал использовать WindowInsetsController

        WindowInsetsControllerCompat windowInsetsController =
                WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());

        windowInsetsController.hide(WindowInsetsCompat.Type.systemBars());

Оба скрывают системные панели (строку навигации и состояния). Но если вы проведете пальцем вниз или вверх, системные панели отобразятся, я хочу, чтобы они все еще были скрыты.

Нужно ли мне использовать для этого определенную тему и/или конфигурацию манифеста? или если нет, то как я могу этого добиться.

ПРИМЕЧАНИЕ. Я использовал приложение запуска от нашего партнера, которое делает именно то, что мне нужно. Панель навигации не отображается, даже если я проведу пальцем вниз или вверх; видна только строка состояния. Однако при смахивании вниз не отображается панель быстрых настроек.

«Я хочу быть уверен, что пользователь не сможет выйти из приложения запуска». - Приложение запуска, поскольку оно является приложением запуска, не является «выходом». «Если вы проведете пальцем вниз или вверх, отобразятся системные панели, я хочу, чтобы они были скрыты». - Почему? Чего вы на самом деле пытаетесь достичь?

dominicoder 30.05.2024 03:42

@dominicoder, как упоминалось выше, я хочу убедиться, что пользователь не сможет выйти из приложения запуска.

NicoTing 30.05.2024 04:46

И, как я уже упоминал в своем комментарии, приложение запуска — это не то, из чего вы «выходите». Системные панели не «выходят» из программы запуска — они позволяют пользователю перемещаться по пользовательскому интерфейсу. Итак, еще раз, чего вы на самом деле пытаетесь достичь, скрывая нижнюю навигацию, учитывая, что пользователь уже не может «выйти» из панели запуска?

dominicoder 30.05.2024 07:07

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

NicoTing 30.05.2024 07:58

«пользователь сможет вернуться домой» — что такое «дом», если не приложение запуска? Возможно, вы используете другие термины, с которыми я не знаком. AFAIK, «дом» — это приложение для запуска. Опять же, панель запуска — это не то, что пользователь может «выйти… из недавних приложений», поскольку это не стандартное приложение. Это корневое/домашнее/базовое приложение. Вы не «выйдите» из него, если не переключитесь на другое приложение запуска. Итак, если пользователь «выходит» из приложения запуска с паролем… куда он пойдет?

dominicoder 30.05.2024 08:05

да, я виноват, я запутался, поэтому, если пользователь нажмет кнопку «Недавние» на панели навигации, я смогу увидеть последние приложения, например приложение настроек, я смог перейти к настройкам телефона, а также если пользователь проведет пальцем вниз , пользователь сможет получить доступ к настройкам через это, именно это я и хочу предотвратить,

NicoTing 30.05.2024 08:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать этот метод, чтобы показать/скрыть эти функции.

private fun setLockTask(start: Boolean) {
    try {
        if (start) {
            startLockTask()
        } else {
            stopLockTask()
        }
    } catch (e: java.lang.Exception) {
        e.printStackTrace()
    }
}

Для отключения - setLockTask (истина)

Для включения - setLockTask (ложь)

Я надеюсь, что это поможет вам решить эту проблему.

Ответ принят как подходящий

Использование Neptune SDK/PAX SDK

private IDAL iDalService = null;

//Initialize SDK
try {

            iDalService = NeptuneLiteUser.getInstance().getDal(this);

        } catch (Exception e) {

            Log.e("Class Name", "Error initializing Neptune SDK, message: " + e.getMessage());
        }

public void hideBars() {

        if (iDalService != null) {
            //Disable Navigation bar.
            iDalService.getSys().enableNavigationBar(false);
            //Disable Status bar.
            iDalService.getSys().enableStatusBar(false);
            //Hide Navigation bar.
            iDalService.getSys().showNavigationBar(false);
            //Hide Status bar.
            iDalService.getSys().enableStatusBar(false);
        }
    }

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