3

我希望将其他内容作为额外的数据库添加到我的应用程序中。我应该将它们放在 apk 和内容提供商中,以便它们可以直接从 google play 更新,或者就像新的 db 文件直接下载到应用程序中一样。

我的 content-provider/apk 方法的问题是,它们都必须在 android manifest 中声明,而且我可能有多个数据库甚至数百个,所以我的 manifest 中需要 100 个 content-provider 声明,即使用户可能只有一对,甚至没有。

除非有办法可以动态生成清单?或者在清单之外加载内容提供者?

谢谢

4

2 回答 2

5

我认为最干净的方法是为所有 db 文件使用一个唯一的 ContentProvider 。

您应该围绕数据库选择构建URI 。

例如 :content://com.your.package/a_db_file/something/things/5

然后在实现你的 ContentProvider 的时候,解析 Uri 得到a_db_file段,打开对应的 db 文件,然后根据剩下的段做需要的工作。

也许你需要一个像getCorrectDb(String a_db_file). 在此方法中,您应该正确调用与所需 db 文件正确匹配的sqlLiteOpenHelper 。

另请查看UriMatcher,它可能对您有用。:)

最后你应该有类似的东西:

@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

    // TODO : Parse uri to get a_db_file string.

    SQLiteDatabase database = getCorrectDb(a_db_file);

    // TODO : get cursor from db according to other segments of uri.

    return cursor.

}
于 2012-10-31T09:27:00.667 回答
1

我会使用一个内容提供者来保持简单,并使用“附加数据库”sql 命令。

于 2013-05-31T17:27:55.080 回答