用密码保护应用程序

时间:2015-10-22 14:48:23

标签: android android-layout android-fragments android-view android-security

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

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

所以在onPause()和onResume()中,我想要启动一个要求输入密码的Dialog。输入正确的密码后(Retrofit检查并返回一个布尔值),允许他进入SettingsActivity。

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

我可以想到一个解决方案,那就是在我的settings_view.xml中添加另一个View,让它填充父级并在正确的密码和VISIBILITY.VISIBLE @ onPause()之后设置它为VISIBILITY.GONE。 我想在onPause()中这样做,因为那个人不能"看到"什么时候去最近的应用程序屏幕。但这似乎是一个非常草率的解决方案。

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

感谢您的建议:)

2 个答案:

答案 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。