-1

我有一个应用程序(扩展),它在后台运行一些服务来监控信标。检查您是否在范围内或超出范围,然后执行一些操作。

我的应用程序中只有一个活动,那就是设置活动。该服务在启动后自动启动,并无限期运行。当一个人尝试打开应用程序时,除非提供正确的密码,否则 SettingsActivity 不应该可用。

因此,在 onPause() 和 onResume() 中,我想启动一个询问密码的对话框。当输入正确的密码时(Retrofit 会检查并返回一个布尔值),他就可以进入 SettingsActivity。

问题:如何使我的活动在 onPause() 上不可见,以及如何在正确密码后使其再次可见(在 onResume() 中启动对话框)。

我可以想到一个解决方案,那就是在我的 settings_view.xml 中添加另一个视图,让它填充父视图并在正确的密码和 VISIBILITY.VISIBLE @ onPause() 之后设置它 VISIBILITY.GONE。我想在 onPause() 中执行此操作,因为这样该人在转到最近的应用程序屏幕时无法“看到”任何东西。但这似乎是一个非常草率的解决方案。

无论如何,我可以在 onPause() 中对布局进行涂黑/着色,并在输入正确的密码后删除涂黑/着色吗?

感谢您的建议 :)

4

2 回答 2

0

问题:如何使我的活动在 onPause() 上不可见,以及如何在正确密码后使其再次可见(在 onResume() 中启动对话框)。

您应该为此考虑活动生命周期的其余部分。如果您从互联网上获取一些信息,那么您的申请中可能会出现很多问题。您可能信号不好,没有可用的网络,甚至网络连接适配器已关闭。

请考虑一下: Activity "login" onCreate:使用所需文件创建一个平淡无奇的活动,然后是一个提交按钮。提交后,查询网络状态以及您用于登录的任何内容。然后将结果保存一段时间(假设一天或 30 分钟,无论您的应用程序感觉如何),通常使用SharedPreferences即可。

活动“SettingsActivity” onResume:检查保存的数据是否允许用户查看活动。如果没有,请完成活动,然后开始“登录”活动。

于 2015-10-23T10:43:52.937 回答
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。

于 2015-10-26T13:15:27.420 回答