Android,如何防止卸载应用程序时删除内部存储文件

Android,如何防止卸载应用程序时删除内部存储文件,android,android-backup-service,Android,Android Backup Service,我正在开发一个应用程序,它将一些设置存储在两个.xml文件中,保存在内部存储器中。我需要将它们保存在那里,所以请不要回答我“将它们保存在SD卡上” 我尝试卸载一个然后重新安装(从Android Studio)我的应用程序,看看Android:allowBackup=“true”是否也适用于内部存储的文件,但答案是否定的 这是因为我从IDE完成了重新安装,还是我需要在某处添加一些代码 谢谢您的帮助。您可以使用环境保存这些文件。getExternalStorageDirectory()存储在外部存储

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

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

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


谢谢您的帮助。

您可以使用
环境保存这些文件。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清单中添加以下权限

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

是否满足所有条件?内部存储目录通常为-/data/data/your.package.name。当根据Android开发者网站卸载应用程序时,您在此内部存储目录中创建和存储的任何文件都将被删除-如果您希望即使卸载应用程序也阻止删除,请将其保存在主外部存储中。我使用
openFileOutput()创建文件
文件中类似的方法。如何使用您建议的
Environment.getExternalStorageDirectory()
方法?@welovelamacompany检查我的更新,以将文件写入和读取到主外部存储directory@welovelamacompany不客气。如果你觉得我的答案有用的话,请不要投赞成票
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) {
           e.printStackTrace();
       }
       Toast.makeText(getApplicationContext(), fileContent, Toast.LENGTH_LONG).show();
   }