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

问题描述

我在应用程序中具有导入和导出数据库文件功能。我使用了mime类型的application/x-sqlite3,它在较早的版本中运行良好。但是,在Android 11中,导出可以按预期工作,但是在选择导入时,复制的DB文件显示为灰色。因此,我无法选择文件进行进一步处理。如果我使用intent.setType("*/*");,则可以访问该文件,但是我不想使每个文件都可选。我只想过滤出sqlite DB文件

我也尝试过使用"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类型,它可以按预期工作。

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);
}