Android Q访问外部文件夹

Android Q访问外部文件夹,android,android-sqlite,android-external-storage,android-10.0,Android,Android Sqlite,Android External Storage,Android 10.0,所以我的一些安卓10用户出现了问题,他们无法保存或访问设备上存储的数据,我发现这是因为安卓10现在说我们只能访问应用程序本身创建的数据,并且只能访问本地文件夹中的数据 因此,我将代码从Environment.getExternalStorageDirectory()更改为getExternalFilesDir(null),并让他们在设备上手动移动文件,除一项功能外,所有功能都恢复正常工作。我允许他们将应用程序上的sqlite数据库中的数据导出到CSV,如何使其在Android 10的下载文件夹中

所以我的一些安卓10用户出现了问题,他们无法保存或访问设备上存储的数据,我发现这是因为安卓10现在说我们只能访问应用程序本身创建的数据,并且只能访问本地文件夹中的数据


因此,我将代码从
Environment.getExternalStorageDirectory()
更改为
getExternalFilesDir(null)
,并让他们在设备上手动移动文件,除一项功能外,所有功能都恢复正常工作。我允许他们将应用程序上的sqlite数据库中的数据导出到CSV,如何使其在Android 10的下载文件夹中仍然可以访问,而不必将其存储在我的应用程序目录文件夹中?

您需要使用SAF framework:

Intent i = new Intent(Intent.ACTION_CREATE_DOCUMENT); 
i.addCategory(Intent.CATEGORY_OPENABLE); 
i.setType("text/csv"); 
String filename = "test.csv"; 
i.putExtra(Intent.EXTRA_TITLE, filename);
startActivityForResult(i, 100);
然后在onActivityResult中:

Uri uri = data.getData();
OutputStream os = getContentResolver().openOutputStream(uri);
//write your file here

为什么不使用
ACTION\u CREATE\u DOCUMENT
并让用户选择导出数据的位置?