我希望将其他内容作为额外数据库添加到我的应用中。 我应该将它们放在apks和内容提供商中,这样它们可以直接从谷歌播放更新,或者直接下载到应用程序中的新数据库文件。
我对content-provider / apk方法的问题是,它们都必须在android清单中声明,我可能有多个数据库甚至数百个,所以在我的清单中需要100个内容提供者声明,即使用户可能只有几个甚至没有。
除非有办法我可以动态生成清单?或者在清单之外加载内容提供商?
由于
答案 0 :(得分:5)
我认为最简洁的方法是为所有数据库文件提供一个唯一 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.
}
答案 1 :(得分:1)
我使用一个内容提供程序来保持简单并使用“attach database”sql命令。