android 11 中 sqlite 数据库备份的 mime 类型是什么?

What is the mime type for sqlite db backup in android 11?

我的应用程序具有导入和导出数据库文件的功能。我使用了 mime-type application/x-sqlite3,它在早期版本中运行良好。 However, in Android 11 export is working as expected but when opt for import, DB file that was copied is grayed out.因此,我无法对 select 文件进行进一步处理。如果我使用 intent.setType("*/*");,我可以访问该文件,但我不想让每个文件都 select 可用。我只想过滤掉 sqlite 数据库文件。

我也尝试过 "application/vnd.sqlite3", "application/octet-stream",但情况仍然存在。

这是代码片段:

private void handleImportView() {
    Intent intent = new Intent();
    String[] mimetypes = {"application/x-sqlite3","application/vnd.sqlite3", "application/octet-stream"};
    intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select file to import"), REQUEST_CODE_RESTORE);
}

现在已经解决了。

我正在使用以下代码创建要导出的文件:

    Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("application/x-sqlite3");
    intent.putExtra(Intent.EXTRA_TITLE, filename);
    startActivityForResult(intent, REQUEST_CODE_FILE_CREATED);

虽然它被指定为 "application/x-sqlite3" 作为 mime 类型,但它实际上使用 mime application/x-trash.

创建了文件

我在 onActivityResult 中使用了 intent.setType("*/*");getContentResolver().getType(uri); 来识别 mime 类型。

现在我添加了这个 mime 类型并且它按预期工作。

private void handleImportView() {
    Intent intent = new Intent();
    String[] mimetypes = {"application/x-sqlite3","application/vnd.sqlite3", "application/octet-stream", "application/x-trash"};
    intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select file to import"), REQUEST_CODE_RESTORE);
}