如果你为第一个应用程序安装了一个显示注册表活动的应用程序,则以下代码有效,但是如果你卸载并重新安装应用程序,则不会让用户注册活动
Boolean isFirstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getBoolean("isFirstRun", true);
if (isFirstRun) {
//show start activity
startActivity(new Intent(Register.this, MainActivity.class));
Toast.makeText(Register.this, "First Run", Toast.LENGTH_LONG)
.show();
}
getSharedPreferences("PREFERENCE", MODE_PRIVATE).edit().putBoolean("isFirstRun", false).commit();
请如何修改此代码t启用首次安装应用程序时的注册活动,此后再也不会。
答案 0 :(得分:1)
您无法依赖设备的内存,因为当用户删除应用时,Android会删除连接到应用的所有数据(SharedPreferences
)。此外,设备可以重置为出厂设置,在这种情况下,保存在设备内存中的任何数据也将被删除。
唯一可以100%确定的方法就是在您的应用程序连接的云上创建一个外部数据库并发送设备的ID(MAC地址),以获得一个标记,指示它是否存在是第一次运行。云中的数据库检查它是否已包含MAC地址:如果是,则表示该应用程序已在该设备上执行,否则这是第一次将新的MAC地址保存在数据库中
更容易(但不是100%肯定)的替代方案是在设备的存储器中生成用于标记设备的文件。如果应用程序找到该文件,则它知道该文件已在那里执行。这种方法IMO更容易实现,并且工作得很好,只有两种情况:用户手动删除文件或设备重置为出厂设置。
答案 1 :(得分:1)
更好的方法是创建一个db表,其中包含首次运行的信息。因此,卸载db将被删除。
答案 2 :(得分:0)
删除首选项时,if将执行true,因为您在getBoolean(...,true)
中将true设置为默认值。将每个布尔值更改为相反的。
答案 3 :(得分:0)
有两种方法可以实现这一目标,
第一种方式更安全可靠,但你需要互联网连接和服务器来存储数据(可能是云,如azure或aws或你自己的服务器/ api)
第二种方式更容易,但由于可以擦除或分离外部存储,因此不可靠。
到目前为止,最佳解决方案是在云中存储设备ID并在安装或应用程序启动过程中检查它。