保存文件不被删除的实现流程
作为一名经验丰富的开发者,我将向你介绍如何实现在Android 11上保存文件不被删除的方法。下面是整个实现流程的概述:
-
检查文件保存权限:在AndroidManifest.xml文件中添加WRITE_EXTERNAL_STORAGE权限,以便应用可以访问外部存储空间。
-
使用新的存储访问框架(Scoped Storage):在Android 11及以后的版本中,Google引入了新的存储访问框架,以增强应用对用户数据的保护。在使用文件保存功能之前,我们需要适配新的存储访问框架。
-
创建文件:使用File类或者DocumentFile类创建文件。File类用于读写应用内部存储,DocumentFile类用于读写外部存储。
-
保存文件:将文件保存到应用内部存储或外部存储,并确保文件路径正确。
-
撤销文件保存:如果用户不再需要保存的文件,可以使用MediaStore API进行撤销操作,将文件从媒体库中删除。
下面详细介绍每一步需要做什么,并给出相应的代码示例:
1. 检查文件保存权限
在AndroidManifest.xml文件中添加WRITE_EXTERNAL_STORAGE权限,以便应用可以访问外部存储空间。请在该文件的<manifest>标签中添加以下代码:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. 使用新的存储访问框架
在Android 11及以后的版本中,我们需要适配新的存储访问框架。首先,在build.gradle文件中添加以下代码,以使用最新的存储访问库:
implementation 'androidx.documentfile:documentfile:1.0.1'
然后,在应用的启动Activity中,添加以下代码以确保应用正确处理存储访问权限:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
}
该代码会打开应用的设置页面,用户可以在此处授予应用访问存储空间的权限。
3. 创建文件
在Android 11中,使用File类或者DocumentFile类创建文件。File类用于读写应用内部存储,DocumentFile类用于读写外部存储。以下是创建文件的示例代码:
使用File类创建文件
File file = new File(getFilesDir(), "example.txt");
使用DocumentFile类创建文件
Uri uri = MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL);
DocumentFile dir = DocumentFile.fromTreeUri(context, uri);
DocumentFile file = dir.createFile("text/plain", "example.txt");
4. 保存文件
将文件保存到应用内部存储或外部存储,并确保文件路径正确。以下是保存文件的示例代码:
保存到应用内部存储
try {
FileOutputStream fos = openFileOutput("example.txt", Context.MODE_PRIVATE);
fos.write("Hello, World!".getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
保存到外部存储
try {
OutputStream os = getContentResolver().openOutputStream(file.getUri());
os.write("Hello, World!".getBytes());
os.close();
} catch (IOException e) {
e.printStackTrace();
}
5. 撤销文件保存
如果用户不再需要保存的文件,可以使用MediaStore API进行撤销操作,将文件从媒体库中删除。以下是撤销文件保存的示例代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
MediaStore.createDeleteRequest(getContentResolver(), file.getUri()).execute();
}
通过上述步骤,你可以实现在Android 11上保存文件不被删除的功能。记得在使用新的存储访问框架时进行适配,确保应用可以正常访问存储空间。
















