-1

У меня есть приложение (extends), и оно запускает некоторую службу в фоновом режиме для мониторинга маяков. Проверка, если вы находитесь или вне зоны действия, а затем выполните некоторые действия.Защитить приложение с помощью пароля

У меня есть только одно действие в моем приложении, и это действие настроек. Служба автоматически запускается после загрузки и выполняется неопределенно долго. Когда пользователь пытается открыть приложение, параметр SettingsActivity не должен появляться, если не будет предоставлен правильный пароль.

Итак, в onPause() и onResume() я хотел бы запустить диалоговое окно с запросом пароля. Когда вводится правильный пароль (Retrofit проверяет это и возвращает логическое значение), ему разрешен параметр SettingsActivity.

Проблема: Как сделать свою деятельность невидимой в onPause() и как сделать ее видимой снова после правильного пароля (запуск диалога в onResume()).

Я мог бы придумать одно решение, и это добавит еще один вид в мои settings_view.xml, пусть он заполнит родительский элемент и установит его VISIBILITY.GONE после правильного пароля и VISIBILITY.VISIBLE @ onPause(). Я хочу сделать это в onPause(), потому что тогда человек не может «видеть» что-либо при переходе на недавний экран приложения. Но это кажется крайне неряшливым решением.

В любом случае, я могу просто отключить/настроить макет в onPause() и удалить затемнение/оттенок после ввода правильного пароля?

Спасибо за совет :)

ответ

0

Я решил этот вопрос следующим образом:

Я включил макет:

Файл activity_settings.xml

<include layout="@layout/view_authentication" 
    android:id="@+id/authenticationView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

view_authentication.xml Файл

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/authenticationView" 
      android:clipToPadding="false"> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:padding="10dp"> 

    <EditText 
     android:id="@+id/authentication_password" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:hint="Password" 
     android:password="true"/> 

    <Button 
     android:id="@+id/authentication_button" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:text="@string/authentication_button"/> 

</LinearLayout> 
</RelativeLayout> 

В моем SettingsActivity.java я добавил следующую строку в onCreate().Это предотвращает скриншоты, которые принимаются и блоки, видя что-либо в последних приложениях

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); 

В onResume(), который вызывается перед открытием приложения в первый раз, или повторно открыть. Я называю следующий метод:

public void showAuthenticationFrame() { 
    authenticationView.setVisibility(View.VISIBLE); 
    contentFrame.setVisibility(View.GONE); 
} 

Когда введен правильный пароль, я наоборот, я поставил authenticationView Унесенные и contentFrame к VISIBLE.

0

Проблема: Как мне сделать деятельность невидимым OnPause() и как мне сделать его видимым после правильного пароля (запуск в диалоговом onResume()).

Для этого вы должны рассмотреть остальную часть своего жизненного цикла деятельности. Если вы получаете информацию из Интернета, тогда в вашем приложении может потребоваться много проблем. У вас может быть плохой сигнал, нет доступной сети или даже адаптер сетевого подключения выключен.

Рассмотрите это вместо: Деятельность «Войти» onCreate: Создайте мягкое действие с необходимыми файлами, а затем кнопку отправки. После отправки запросите статус сети и все, что вы используете для входа. Затем сохраните результат на некоторое время (скажем, день или 30 минут, что лучше всего подходит для вашего приложения), обычно это будет SharedPreferences.

Активность «SettingsActivity» onResume: проверьте, позволяют ли сохраненные данные видеть активность. Если это не так, завершите работу и запустите «login».

+0

Я сделал это, включив макет в свой параметр SettingsActivity (который является моим единственным видом деятельности), затем я установил его как видимый в onResume. Когда правильный пароль вводится (подтверждается сервером), он отключается, и фактический макет устанавливается на видимый. Чтобы избежать скриншотов и видеть что-либо в последних приложениях, я использовал «getWindow(). AddFlags (WindowManager.LayoutParams.FLAG_SECURE); – Sverg

+0

@Sverg Если вы решили проблему, отметьте вопрос как ответ. Если то, что вы сделали, существенно отличается, тогда опубликуйте ответ самостоятельно и отправьте пример кода, чтобы новые пользователи могли проверить, что вы сделали, и узнать об этом. Проверьте любой ответ, щелкнув символ 'v' слева, под стрелками вверх/вниз – Bonatti