📅  最后修改于: 2023-12-03 14:59:17.282000             🧑  作者: Mango
Android设备的存储可以分为两种:内部存储和外部存储。内部存储通常用于存储应用程序数据,而外部存储通常用于存储用户数据,例如照片、音乐和文档等。
在进行外部存储操作前,需要先检查外部存储是否可用。可以使用以下代码来进行检查:
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
该函数返回一个布尔值,如果外部存储是可写的,则返回 true。
在 Android 中,可以通过 getExternalStorageDirectory()
函数获取外部存储目录:
File externalStorageDirectory = Environment.getExternalStorageDirectory();
上面的代码将获取外部存储目录作为 File 对象存储在 externalStorageDirectory
变量中。
从 Android 6.0(API 级别 23)开始,需要在运行时请求 READ_EXTERNAL_STORAGE
或 WRITE_EXTERNAL_STORAGE
权限才能读取或写入外部存储。在代码中,可以使用以下方法来检查是否已经获得了这些权限:
public boolean checkExternalStoragePermission() {
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
return permissionCheck == PackageManager.PERMISSION_GRANTED;
}
接下来,如果还没有获得这些权限,则需要请求这些权限:
if (!checkExternalStoragePermission()) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
}
当用户将应用程序安装在 Android 6.0 或更高版本的设备上时,他将会被提醒授予或拒绝这些权限。在权限请求对话框消失后,将调用 onRequestPermissionsResult()
方法。在该方法中,您可以检查权限是否已被授予:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted
} else {
// Permission denied
}
}
}
下面是一些用于读写外部存储的代码示例。请确保已经检查了外部存储是否可用,并获取了适当的权限。
写操作
File file = new File(externalStorageDirectory, "example.txt");
String text = "Hello world!";
try {
FileWriter writer = new FileWriter(file);
writer.append(text);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
读操作
File file = new File(externalStorageDirectory, "example.txt");
StringBuilder builder = new StringBuilder();
try {
FileReader reader = new FileReader(file);
char[] buffer = new char[1024];
int read;
while ((read = reader.read(buffer)) != -1) {
builder.append(buffer, 0, read);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
String text = builder.toString();
上面的代码将从名为 "example.txt" 的文件中读取文本内容,并将其存储在 text
变量中。
本文展示了如何检查外部存储的可用性、获取外部存储目录以及访问外部存储。请确保了解了这些操作并遵循最佳实践,例如保护数据和正确地请求权限。