📅  最后修改于: 2023-12-03 15:12:11.442000             🧑  作者: Mango
在 Android 系统中,为了保护用户的敏感信息和数据,Google 限制了应用对存储的访问权限。为了让应用可以读取设备中的文件和文件夹,必须先获得读取存储权限。本文将介绍如何申请读取存储权限以及如何在应用中读取和写入文件。
在 Android 6.0(API 级别 23)及其以上版本中,为了获得读取存储权限,必须动态地请求用户授予权限。以下是如何在应用中请求读取存储权限的代码片段:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// 如果应用没有读取存储权限,则请求权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
} else {
// 如果应用已经有读取存储权限,则在此执行读取或写入文件的代码
readOrWriteFile();
}
在此代码片段中:
ContextCompat.checkSelfPermission
方法检查应用是否已经被授予了 Manifest.permission.READ_EXTERNAL_STORAGE
权限。checkSelfPermission
返回的值不是 PackageManager.PERMISSION_GRANTED
,则说明应用没有被授予读取存储权限,需要请求授权。ActivityCompat.requestPermissions
方法请求授权,第一个参数是当前 Activity
,第二个参数是需要申请的权限,第三个参数是请求码(可以自定义,用于处理授权结果)。请注意,即使应用已经在 AndroidManifest.xml
文件中声明了读取存储权限,但在运行时仍需要请求授权。
在应用拥有读取存储权限之后,就可以在代码中读取和写入文件了。以下是如何读取和写入文件的代码片段:
public void readOrWriteFile() {
// 获取文件的路径
File file = new File(Environment.getExternalStorageDirectory(), "example.txt");
try {
// 写入文件
FileWriter writer = new FileWriter(file);
writer.write("Hello World!");
writer.close();
// 读取文件
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = reader.readLine();
reader.close();
// 在日志中输出文件内容
Log.d(TAG, "File contents: " + line);
} catch (IOException e) {
Log.e(TAG, "Error reading/writing file", e);
}
}
在此代码片段中:
File
类代表一个文件或文件夹,使用 Environment.getExternalStorageDirectory()
方法获取外部存储的根目录。FileWriter
类向文件写入数据,使用 BufferedReader
类从文件读取数据。Log
类用于在日志中输出文件的内容和异常信息。请注意,如果外部存储设备不可用或没有足够的空间,可能会发生异常。因此,在使用外部存储时,需要对这些异常进行适当的处理。
本文介绍了如何申请读取存储权限以及如何在应用中读取和写入文件。在编写应用时,请务必遵循 Google 的安全性和隐私规定,并正确处理权限请求和异常情况。