我无法为我的混乱提出一个标题,但希望它能很好地描述我的问题。
我制作了一款需要一些权限的应用。当应用程序启动时,我会检查第一次设置。虽然这很可能是一种非常低效且错误的解决方法,但我创建了一个文件,其中包含一个布尔值,实际上是否是第一次打开应用程序。我也在使用外部存储,这可能是最糟糕的方式,但这是我知道如何做到这一点的唯一方式所以我去了它。下面是我获取数据和检索数据的方法。
public static void serializeDataOutBoolean(boolean b) {
try {
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + '/';
File newFile = new File(path + "writeBoolean.txt");
FileOutputStream fos = new FileOutputStream(newFile);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeBoolean(b);
oos.flush();
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static boolean serializeDataInBoolean(){
try{
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + '/';
FileInputStream fin = new FileInputStream(path + "writeBoolean.txt");
ObjectInputStream ois = new ObjectInputStream(fin);
boolean iBool = ois.readBoolean();
ois.close();
return iBool;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
正如您所看到的,如果我第一次打开它并且文件不存在,这将返回false,这意味着这是第一次设置,我需要检查权限。然后,一旦用户接受了所有权限,我将此布尔值设置为true,因此我知道将来不会运行第一次设置。
我的问题如下:如果我安装应用程序,授予权限并且我写入此文件为真,然后卸载应用程序,文件仍然存在。我可以进入我的文件夹(我使用的是s8)并进入内部存储并查看我编写的文件。我假设该文件包含一个布尔“true”,因为这是我写给它的最后一件事。现在,如果我重新安装应用程序,由于某种原因它会执行第一次设置,即使该文件已经存在并且有一个真实的写入。 (这显然是我想要的)。
但我只是不明白为什么它正在做我想要的。我的dataIn方法不应该看到有一个名为"writeBoolean.txt"
的文件并看到它填充了一个真值并跳过这个过程吗?
修改
正如有人指出的那样,我完全忘记了我称之为这些方法的地方,对不起。
boolean testingFirst = MyService.serializeDataInBoolean();
if(!testingFirst) {
Intent i = new Intent(getApplicationContext(), Permissions.class);
startActivity(i);
}
如果这是第一次设置(false),那么它会运行我的权限类,一旦完成,它将通过以下方式写入文件:MyService.serializeDataOutBoolean(true);
除了这个方法之外,我还知道通过使用我为此设置的服务类每10秒连续检查一次,该值被设置为true。使用这个非常科学的代码块:
String testingString = "WHAT DOES THIS CONTAIN???????? " + String.valueOf(serializeDataInBoolean());
System.out.println(testingString);
我能够确认该文件确实包含Boolean:true。
感谢您的帮助,如果有人想到更好的标题,请随时编辑它。