Android:如果我想从Downloads文件夹中查看/选择一个SQLite数据库,那么mime类型是什么?

Ser*_*rde 9 sqlite android mime-types

我正在使用SQLite数据库编写应用程序.我已经编写了备份我的SQLite数据库的代码.我现在希望能够从这样的副本中恢复我的应用程序数据库.我正在使用Android设备"打开"对话框.如果我在列表中使用其他内容提供商,我会看到该文件,例如"蓝牙文件传输"!但是如果我尝试使用"下载"选项,我就不会看到它.

我在我的下载文件夹中复制了一个SQLite数据库.我试图使用fileIntent.setType(" / ").

谢谢.

ban*_*ing 15

是的application/x-sqlite3.我在自己的应用程序中使用它.

更多信息在这里.

这是我如何使用它的一个例子:

File backupDB = ...;

//Uri uri = Uri.fromFile(backupDB); //From Android 7, this line results in a FileUriExposedException. Therefore, we must use MyFileProvider instead...
Uri uri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".com.example.myapp.myfileprovider", backupDB);

Intent newIntent = new Intent(Intent.ACTION_VIEW);
newIntent.setDataAndType(uri, "application/x-sqlite3");
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
newIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

startActivity(newIntent);
Run Code Online (Sandbox Code Playgroud)

为了完整性,这是我的MyFileProvider.java类:

package com.example.myapp;

import android.support.v4.content.FileProvider;

public class MyFileProvider extends FileProvider {
}
Run Code Online (Sandbox Code Playgroud)

以下是如何在清单中声明它:

<provider
    android:name=".MyFileProvider"
    android:authorities="${applicationId}.com.example.myapp.myfileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/my_file_provider_paths"/>
</provider>
Run Code Online (Sandbox Code Playgroud)

最后,这是我的my_file_provider_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path name="external_files" path="."/>
</paths>
Run Code Online (Sandbox Code Playgroud)


Fab*_*ian 5

自2018年2月以来,SQLite3格式已在IANA上注册了一种官方媒体类型:application/vnd.sqlite3。的使用application/x-sqlite3是不推荐使用的,如果需要向后兼容性只应使用。

看到:


Bob*_*der 2

我没有完整的答案。相反,我会提供一些想法。

我不确定“打开自”对话框是什么意思。我假设您指的是“选择器”对话框,它显示可以处理意图的应用程序的图标。

许多 Android 应用程序使用MimeTypeMap来关联文件扩展名和 MIME 类型。没有方法可以迭代 MimeTypeMap 来查看其所有映射是什么。我相当有信心这些就是映射。列表中没有 SQLite 的条目。SQLite 的传统 MIME 类型是“application/x-sqlite3”。

在您的帖子中,您包括了fileIntent.setType("/"). 我猜你实际上输入了fileIntent.setType("*/*"),并且因为它没有被引用,所以格式化程序吃了两颗星。

因为您可以为 SQLite 数据库文件提供任何您想要的扩展名,所以您可以灵活地选择一个能够产生您想要的结果的扩展名。我猜您想要找到一些东西,不仅可以使“下载”包含在选择器对话框中,而且还可以排除不需要的应用程序。在查看了MimeTypeMap.