我需要在 Android 11(api 级别 30)上打开一个大型 SQLite 数据库。文档说“MANAGE_EXTERNAL_STORAGE”是未来的问题。
因此,我在https://developer.android.com/training/data-storage/shared/documents-files阅读了文档并使用了:
public void openDirectory(Uri uriToLoad) {
// Choose a directory using the system's file picker.
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);
}
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent resultData) {
if (requestCode == 42
&& resultCode == Activity.RESULT_OK) {
// The result data contains a URI for the document or directory that
// the user selected.
Uri uri = null;
if (resultData != null) {
uri = resultData.getData();
DocumentFile dfile = DocumentFile.fromTreeUri(this, uri);
DocumentFile[] fileList = dfile.listFiles();
}
}
}
如果我正确理解文档,则文件已弃用或不能与 SD 卡上的文件一起使用,而 DocumentFile/URI 是新事物。但是要打开我使用的数据库:
SQLiteDatabase.openDatabase(
pFile.getAbsolutePath(),
null,
SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.OPEN_READONLY))
所以我的问题是:如何使用 URI 或 DocumentFile 打开大型(10Gb 或更多)数据库。
Ps.:数据库是带有地图图像的 RasterLite 文件