В настоящее время я работаю над приложением 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, как упоминалось выше, я хочу убедиться, что пользователь не сможет выйти из приложения запуска.
И, как я уже упоминал в своем комментарии, приложение запуска — это не то, из чего вы «выходите». Системные панели не «выходят» из программы запуска — они позволяют пользователю перемещаться по пользовательскому интерфейсу. Итак, еще раз, чего вы на самом деле пытаетесь достичь, скрывая нижнюю навигацию, учитывая, что пользователь уже не может «выйти» из панели запуска?
Это требование проекта: пользователь не должен иметь возможности покидать приложение запуска, имея доступ к панели навигации, пользователь сможет вернуться домой или выйти из приложения из последних приложений. в приложении запуска будет возможность выйти, но придется ввести пароль.
«пользователь сможет вернуться домой» — что такое «дом», если не приложение запуска? Возможно, вы используете другие термины, с которыми я не знаком. AFAIK, «дом» — это приложение для запуска. Опять же, панель запуска — это не то, что пользователь может «выйти… из недавних приложений», поскольку это не стандартное приложение. Это корневое/домашнее/базовое приложение. Вы не «выйдите» из него, если не переключитесь на другое приложение запуска. Итак, если пользователь «выходит» из приложения запуска с паролем… куда он пойдет?
да, я виноват, я запутался, поэтому, если пользователь нажмет кнопку «Недавние» на панели навигации, я смогу увидеть последние приложения, например приложение настроек, я смог перейти к настройкам телефона, а также если пользователь проведет пальцем вниз , пользователь сможет получить доступ к настройкам через это, именно это я и хочу предотвратить,




Вы можете использовать этот метод, чтобы показать/скрыть эти функции.
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);
}
}
«Я хочу быть уверен, что пользователь не сможет выйти из приложения запуска». - Приложение запуска, поскольку оно является приложением запуска, не является «выходом». «Если вы проведете пальцем вниз или вверх, отобразятся системные панели, я хочу, чтобы они были скрыты». - Почему? Чего вы на самом деле пытаетесь достичь?