Android应用程序首次运行

Android应用程序首次运行,android,Android,在我的应用程序中,我存储敏感用户数据(如银行详细信息),用户可以使用单独的密码锁定每个详细信息。我希望用户在安装后第一次运行应用程序时设置主密码,以便在忘记密码的情况下通过输入此主密码恢复数据 因此,当应用程序在安装后第一次运行时,会出现一个弹出窗口,要求他设置主密码,用户需要设置密码才能继续 但是,当手机重启后或关闭应用程序后启动应用程序时,他不应该得到弹出窗口 安装后第一次运行应用程序时,弹出窗口应出现一次,且仅出现一次 假设创建对话框的函数是setMasterPassword(),第一次运

在我的应用程序中,我存储敏感用户数据(如银行详细信息),用户可以使用单独的密码锁定每个详细信息。我希望用户在安装后第一次运行应用程序时设置主密码,以便在忘记密码的情况下通过输入此主密码恢复数据

因此,当应用程序在安装后第一次运行时,会出现一个弹出窗口,要求他设置主密码,用户需要设置密码才能继续

但是,当手机重启后或关闭应用程序后启动应用程序时,他不应该得到弹出窗口

安装后第一次运行应用程序时,弹出窗口应出现一次,且仅出现一次

假设创建对话框的函数是
setMasterPassword()
,第一次运行时在哪里调用此函数

android是否有任何参数来确定该应用程序是新安装的

或者我应该只使用偏好变量来检查这一点吗?{类似于将PreferenceVariable中的计数器初始化为0,然后在onCreate()中检查此值,并且仅当计数器为0时调用setMasterPassword(),然后将计数器递增1,这样就不会再次调用它。}

最好的方法是什么


提前谢谢

我还试图找出是否存在“新安装”布尔值,但似乎没有类似的布尔值,因此您应该像folk一样选择共享首选项

附:顺便说一下,这是那个问题的重复

PS2:请记住,如果用户删除了应用程序中存储的所有信息,那么该检查也将被删除,因此您可以再次输入

如何提高您的信息安全性:

  • 将用户信息与一些控制字节(随机数、特定字符串等)一起存储,并使用用户密码对此进行加密
  • 任何时候你需要用户的信息,抓取该文件,尝试用用户的密码解密其内容(每次都会被询问)
  • 检查控制字节(a
    substr()
    可能就足够了)。如果它们是一样的,那么抓住信息。如果没有,请再次提示
  • 这样,您可以获得一些好处:

    • 您不会将用户密码存储在任何位置。SharedReferences不会存储这个,只存储“firstTime”变量
    • 如果用户转储应用程序的信息,再次输入密码不会减少您的信息
    • 从资源管理器中打开该文件只会显示一组数字、符号和可能不可读的字节,这些都会破坏编辑器

    我还试图找出是否存在“新安装”布尔值,但似乎没有类似的布尔值,因此您应该像folk一样选择共享首选项

    附:顺便说一下,这是那个问题的重复

    PS2:请记住,如果用户删除了应用程序中存储的所有信息,那么该检查也将被删除,因此您可以再次输入

    如何提高您的信息安全性:

  • 将用户信息与一些控制字节(随机数、特定字符串等)一起存储,并使用用户密码对此进行加密
  • 任何时候你需要用户的信息,抓取该文件,尝试用用户的密码解密其内容(每次都会被询问)
  • 检查控制字节(a
    substr()
    可能就足够了)。如果它们是一样的,那么抓住信息。如果没有,请再次提示
  • 这样,您可以获得一些好处:

    • 您不会将用户密码存储在任何位置。SharedReferences不会存储这个,只存储“firstTime”变量
    • 如果用户转储应用程序的信息,再次输入密码不会减少您的信息
    • 从资源管理器中打开该文件只会显示一组数字、符号和可能不可读的字节,这些都会破坏编辑器

    最好的方法可能是在安装时设置接收器

    <receiver android:name =".CLASSNAME">
         <intent-filter>
                     <action android:name="com.android.vending.INSTALL_REFERRER"/>
    
          </intent-filter>
          </receiver> 
    
    
    


    祝你好运。

    最好的方法可能是在安装时设置接收器

    <receiver android:name =".CLASSNAME">
         <intent-filter>
                     <action android:name="com.android.vending.INSTALL_REFERRER"/>
    
          </intent-filter>
          </receiver> 
    
    
    


    祝你好运。

    因此单次通过身份验证的缺点。如果恶意用户设法获取/更改密码,您设置的任何机制都不会阻止他们。如果信息真的那么敏感,您可能希望启用第二种身份验证机制(安全问题、电子邮件确认等)

    ,从而消除单次身份验证的缺点。如果恶意用户设法获取/更改密码,您设置的任何机制都不会阻止他们。如果信息真的那么敏感,您可能需要启用第二个身份验证机制(安全问题、电子邮件确认等)。

    在某个地方找到了此代码,它对我非常有效。 所以,我想这也会对你有帮助

    看一看

    使用SharedReference存储firstrun值,并根据该值检入启动活动。如果设置了该值,则无需显示该对话框。否则,显示对话框并将firstrun标志保存在SharedReference中

    在您的主要活动中:

    public void onCreate(){
        boolean firstrun = getSharedPreference("PREFERENCE", MODE_PRIVATE).getBoolean("firstrun", true);
        if (firstrun){
       [[ ...Display the dialog ]]
        // Save the state
        getSharedPreference("PREFERENCE", MODE_PRIVATE)
            .edit()
            .putBoolean("firstrun", false)
            .commit();
        }
    }
    

    在某个地方找到了这段代码,它非常适合我。 所以,我想这也会对你有帮助

    看一看

    使用SharedReference存储firstrun值,并根据该值检入启动活动。如果设置了该值,则无需显示该对话框。否则,显示对话框并将firstrun标志保存在SharedReference中

    在您的主要活动中:

    public void onCreate(){
        boolean firstrun = getSharedPreference("PREFERENCE", MODE_PRIVATE).getBoolean("firstrun", true);
        if (firstrun){
       [[ ...Display the dialog ]]
        // Save the state
        getSharedPreference("PREFERENCE", MODE_PRIVATE)
            .edit()
            .putBoolean("firstrun", false)
            .commit();
        }
    }
    

    是的,如果我的手机掉到另一个人的手上,他就删除了