使用密码保护应用程序
Protect application with password
我有一个应用程序(扩展),它在后台运行一些服务来监控信标。检查您是否在范围内或超出范围,然后执行一些操作。
我的应用程序中只有一个 Activity,那就是设置 Activity。该服务在启动后自动启动,并无限期运行。当有人试图打开应用程序时,除非提供正确的密码,否则设置Activity 不应可用。
所以在 onPause() 和 onResume() 中,我想启动一个要求输入密码的对话框。当输入正确的密码时(Retrofit 检查这个和 returns 一个布尔值),他被允许进入设置 Activity.
问题:如何让我的 activity 不可见 onPause() 以及如何在正确密码后使其再次可见(在 onResume() 中启动对话框)。
我可以想到一个解决方案,那就是向我的 settings_view.xml 添加另一个视图,让它填充父级并在正确的密码和 VISIBILITY.VISIBLE @onPause( ).
我想在 onPause() 中执行此操作,因为那时该人在转到最近的应用程序屏幕时不能 "see" 任何东西。但这似乎是一个非常草率的解决方案。
我是否可以 blackout/tint onPause() 中的布局并在输入正确的密码后删除 blackout/tint?
感谢您的建议:)
Problem: How do I make my activity invisible onPause() and how do I make it visible again after correct password (launch dialog in onResume()).
您应该为此考虑 activity 生命周期的其余部分。
如果您是从互联网上获取一些信息,那么您的应用程序可能会遇到很多问题。您可能信号不好,没有可用网络,甚至网络连接适配器已关闭。
考虑一下:
Activity "login" onCreate
:用所需的文件创建一个平淡无奇的 activity,然后是一个提交按钮。提交后,查询网络状态以及您用于登录的任何内容。然后将结果保存一段时间(假设一天或 30 分钟,根据您的应用程序感觉最好),通常 SharedPreferences 就可以了。
Activity "SettingsActivity" onResume
: 检查保存的数据是否允许用户看到 Activity。如果没有,完成 activity,然后开始 "login"。
我解决了这个问题如下:
我包含了一个布局:
文件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 设置为 GONE,将 contentFrame 设置为 VISIBLE。
我有一个应用程序(扩展),它在后台运行一些服务来监控信标。检查您是否在范围内或超出范围,然后执行一些操作。
我的应用程序中只有一个 Activity,那就是设置 Activity。该服务在启动后自动启动,并无限期运行。当有人试图打开应用程序时,除非提供正确的密码,否则设置Activity 不应可用。
所以在 onPause() 和 onResume() 中,我想启动一个要求输入密码的对话框。当输入正确的密码时(Retrofit 检查这个和 returns 一个布尔值),他被允许进入设置 Activity.
问题:如何让我的 activity 不可见 onPause() 以及如何在正确密码后使其再次可见(在 onResume() 中启动对话框)。
我可以想到一个解决方案,那就是向我的 settings_view.xml 添加另一个视图,让它填充父级并在正确的密码和 VISIBILITY.VISIBLE @onPause( ). 我想在 onPause() 中执行此操作,因为那时该人在转到最近的应用程序屏幕时不能 "see" 任何东西。但这似乎是一个非常草率的解决方案。
我是否可以 blackout/tint onPause() 中的布局并在输入正确的密码后删除 blackout/tint?
感谢您的建议:)
Problem: How do I make my activity invisible onPause() and how do I make it visible again after correct password (launch dialog in onResume()).
您应该为此考虑 activity 生命周期的其余部分。 如果您是从互联网上获取一些信息,那么您的应用程序可能会遇到很多问题。您可能信号不好,没有可用网络,甚至网络连接适配器已关闭。
考虑一下:
Activity "login" onCreate
:用所需的文件创建一个平淡无奇的 activity,然后是一个提交按钮。提交后,查询网络状态以及您用于登录的任何内容。然后将结果保存一段时间(假设一天或 30 分钟,根据您的应用程序感觉最好),通常 SharedPreferences 就可以了。
Activity "SettingsActivity" onResume
: 检查保存的数据是否允许用户看到 Activity。如果没有,完成 activity,然后开始 "login"。
我解决了这个问题如下:
我包含了一个布局:
文件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 设置为 GONE,将 contentFrame 设置为 VISIBLE。