添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

安卓系统,如何防止应用卸载后内部存储文件被删除?

0 人关注

我正在开发一个应用程序,它将一些设置保存在两个.xml文件中,并保存在内部存储器中。我需要把它们保存在那里,所以请不要回答我 "把它们保存在SD卡上"。

我尝试卸载,然后重新安装(从Android Studio)我的应用程序,看看 android:allowBackup="true" 是否也适用于内部存储的文件,但答案是否定的。

这是因为我从IDE完成了重新安装,还是我需要在某个地方添加一些代码?

谢谢你的帮助。

2 个评论
所有的条件是 备份时间表 met?
内部存储目录通常为 - /data/data/your.package.name。无论你在这个内部存储目录中创建和存储了什么文件,都会在应用卸载时被删除,正如Android开发者网站上所说的那样------。 developer.android.com/guide/topics/data/... 如果你希望防止它在应用卸载后也被删除,请将它们保存在主要的外部存储中。
android
android-backup-service
we love lama company
we love lama company
发布于 2018-03-25
2 个回答
Alex Busuioc
Alex Busuioc
发布于 2018-03-25
已采纳
0 人赞同

从API级别29开始,有 "hasFragileUserData "清单标志

文件 指出,

如果为真,则提示用户在卸载时保留该应用的数据。 可以是一个布尔值,如 "真 "或 "假"。

样品代码。

<application
  android:hasFragileUserData="true">
    
Kishan
Kishan
发布于 2018-03-25
0 人赞同

你可以使用 Environment.getExternalStorageDirectory() 保存这些文件。这是在外部存储设备上的存储。不要把外部存储设备与SD卡混淆。SD卡是二级外部存储。但是, Environment.getExternalStorageDirectory() 会返回你的设备的主要外部存储的顶级目录,这基本上是一个非可移动存储。

所以文件路径可以是/storage/emulated/0/YOURFOLDER/my.xml。

因此,即使你卸载了该应用程序,这些文件也不会被删除。

你可以使用这个片段在你的主要外部存储中创建一个文件。

private final String fileName = "note.txt";    
private void writeFile() {
       File extStore = Environment.getExternalStorageDirectory();
       // ==> /storage/emulated/0/note.txt
       String path = extStore.getAbsolutePath() + "/" + fileName;
       Log.i("ExternalStorageDemo", "Save to: " + path);
       String data = editText.getText().toString();
       try {
           File myFile = new File(path);
           myFile.createNewFile();
           FileOutputStream fOut = new FileOutputStream(myFile);
           OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
           myOutWriter.append(data);
           myOutWriter.close();
           fOut.close();
           Toast.makeText(getApplicationContext(), fileName + " saved", Toast.LENGTH_LONG).show();
       } catch (Exception e) {
           e.printStackTrace();

不要忘记在Android Manifest中添加以下权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

然后,你可以像下面那样读取该文件。

private void readFile() {
       File extStore = Environment.getExternalStorageDirectory();
       // ==> /storage/emulated/0/note.txt
       String path = extStore.getAbsolutePath() + "/" + fileName;
       Log.i("ExternalStorageDemo", "Read file: " + path);
       String s = "";
       String fileContent = "";
       try {
           File myFile = new File(path);
           FileInputStream fIn = new FileInputStream(myFile);
           BufferedReader myReader = new BufferedReader(
                   new InputStreamReader(fIn));
           while ((s = myReader.readLine()) != null) {
               fileContent += s + "\n";
           myReader.close();
           this.textView.setText(fileContent);
       } catch (IOException e) {