在Android 10中,由于隐私和安全性的原因,应用程序无法直接访问外部存储中的文件路径。取而代之的是,应用程序需要使用SAF(Storage Access Framework)
来创建文件和获取结果URI。
下面是使用SAF
创建文件意图并获取结果URI的示例代码:
private static final int CREATE_FILE_REQUEST_CODE = 1;
// 创建文件意图
private void createFileIntent() {
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TITLE, "new_file.txt");
startActivityForResult(intent, CREATE_FILE_REQUEST_CODE);
}
// 处理创建文件意图的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CREATE_FILE_REQUEST_CODE && resultCode == RESULT_OK) {
if (data != null) {
Uri uri = data.getData();
// 在这里使用URI来操作文件
// 例如,可以使用ContentResolver打开文件并写入内容
}
}
}
在createFileIntent()
方法中,我们创建了一个ACTION_CREATE_DOCUMENT
的意图,并指定了文件的类型和名称。然后,我们调用startActivityForResult()
方法来启动创建文件意图。
在onActivityResult()
方法中,我们检查请求码和结果码以确保我们处理的是正确的结果。如果请求码和结果码匹配,并且意图数据不为空,我们可以从Intent
中获取结果URI。然后,您可以使用该URI来进行文件操作,例如使用ContentResolver
打开文件并写入内容。
请注意,从Android 10开始,您还需要在清单文件中声明android.permission.MANAGE_EXTERNAL_STORAGE
权限才能使用SAF
。