我有一个应用程序(扩展),它在后台运行一些服务来监视信标。检查您是否进入或超出范围,然后执行某些操作。
我的应用程序中只有一个Activity,那就是Settings Activity。该服务在引导后自动启动,并无限期运行。当某人尝试打开该应用时,除非提供正确的密码,否则SettingsActivity不应该可用。
所以在onPause()和onResume()中,我想要启动一个要求输入密码的Dialog。输入正确的密码后(Retrofit检查并返回一个布尔值),允许他进入SettingsActivity。
问题:如何使我的活动在onPause()上不可见,如何在正确的密码(onResume()中的启动对话框)后再次显示它。
我可以想到一个解决方案,那就是在我的settings_view.xml中添加另一个View,让它填充父级并在正确的密码和VISIBILITY.VISIBLE @ onPause()之后设置它为VISIBILITY.GONE。 我想在onPause()中这样做,因为那个人不能"看到"什么时候去最近的应用程序屏幕。但这似乎是一个非常草率的解决方案。
无论如何我可以在onPause()中对布局进行遮光/着色,并在输入正确的密码后删除遮光/色调?
感谢您的建议:)
答案 0 :(得分:0)
问题:如何使我的活动在onPause()上不可见,如何在正确的密码(onResume()中的启动对话框)后再次显示它。
您应该考虑剩下的活动生命周期。 如果您从互联网上获得一些信息,那么很多问题可能需要您的应用程序。您可能信号不良,没有网络可用,甚至网络连接适配器已关闭。
请考虑以下事项:
活动"登录" onCreate
:使用所需文件创建一个平淡无奇的活动,然后创建一个提交按钮。提交后,查询网络状态以及您用于登录的任何内容。然后将结果保存一段时间(假设一天或30分钟,无论哪种方式最适合您的应用),通常SharedPreferences都可以。
活动" SettingsActivity" onResume
:检查保存的数据是否允许用户查看活动。如果没有,请完成活动,然后开始登录"之一。
答案 1 :(得分: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设置为GONE,将contentFrame设置为VISIBLE。