在Android 10及更高版本中,应用程序无法直接访问外置SD卡根目录或其他应用程序的文件夹,但可以通过使用用户选择器或使用存储权限来访问特定目录。以下是一种解决方法,使用存储权限来访问文件夹。
private static final int REQUEST_PERMISSION_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_PERMISSION_CODE);
} else {
// 权限已经被授予,执行具体操作
accessFolder();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSION_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 授予权限,执行具体操作
accessFolder();
} else {
// 拒绝权限,可以给出提示或执行其他操作
}
}
}
private void accessFolder() {
File folder = new File(Environment.getExternalStorageDirectory() + "/Android/data/com.example.app/files");
if (folder.exists()) {
// 文件夹存在,可以进行读写操作
// 例如:读取文件列表
File[] files = folder.listFiles();
for (File file : files) {
Log.d("File", file.getName());
}
} else {
// 文件夹不存在,可以创建文件夹
boolean success = folder.mkdirs();
if (success) {
Log.d("File", "Folder created");
} else {
Log.d("File", "Failed to create folder");
}
}
}
上述代码中,首先检查应用程序是否具有存储权限。如果没有权限,则将请求存储权限。如果权限已授予,则调用accessFolder()方法,在该方法中可以访问文件夹。
请注意,根据您的实际需求,文件夹路径可能需要进行相应更改。此示例中的路径是一个示例路径,您需要根据自己的应用程序需要进行调整。