Android多内容提供商(DLC)

Android多内容提供商(DLC),android,android-manifest,android-contentprovider,Android,Android Manifest,Android Contentprovider,我正在寻找添加额外的内容到我的应用程序作为额外的数据库。 我应该把它们放在APK和内容提供商中,这样它们就可以直接从google play更新,或者直接下载到应用程序中的新db文件 我对contentprovider/apk方法的问题是,它们都必须在android清单中声明,而且我可能有多个数据库,甚至上百个,因此在我的清单中需要100个contentprovider声明,即使用户可能只有几个或甚至没有 除非有办法动态生成清单?还是在清单之外加载内容提供程序 谢谢我认为最干净的方法是为所有数据库

我正在寻找添加额外的内容到我的应用程序作为额外的数据库。 我应该把它们放在APK和内容提供商中,这样它们就可以直接从google play更新,或者直接下载到应用程序中的新db文件

我对contentprovider/apk方法的问题是,它们都必须在android清单中声明,而且我可能有多个数据库,甚至上百个,因此在我的清单中需要100个contentprovider声明,即使用户可能只有几个或甚至没有

除非有办法动态生成清单?还是在清单之外加载内容提供程序


谢谢

我认为最干净的方法是为所有数据库文件提供一个独特的

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

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

然后在实现ContentProvider时,解析Uri以获取
a_db_文件
段,打开相应的db文件,然后根据其余段执行所需的工作

也许您需要一个类似于
getCorrectDb(字符串a\u db\u文件)
的方法。 在该方法中,您应该正确调用与所需db文件正确匹配的

另外,请看一看,它可能对您有用。:)

最后,您应该有如下内容:

@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.

}

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

等等,我一直都是个白痴吗?您在清单中声明的内容提供商是供您的应用程序读取的提供商,还是供其他应用程序读取的提供商?ContentProvider同时适用于externals应用程序和当前应用程序。您可以使用导出的布尔值指定正确的行为,如下所述:那么,我在存储数据的应用程序清单中声明提供者,对吗?我犯了从另一个角度看它的错误,因为我必须在我的应用程序中声明我想阅读的内容提供商!是,您在包含数据的应用程序中声明提供程序。:)好的,如果我有一个具有多个db的提供者,我如何更新这些db中的内容?如果我在apk中有单独的提供者,那么我不能使用Google play来更新单独的apk,从而更新db吗?
好的,如果我有一个提供者具有多个db in,我如何更新这些db中的内容?
query
的示例相同,但使用提供者的
update
方法。您提供的Uri(
getContentResolver().update(Uri…
)应该有一个与数据库匹配的段。将ContentProvider视为管理对一个或多个数据库的访问的大型工具。这取决于您如何组织工作。:)如果您希望一个数据库有一个apk,这是可能的。然后可以只更新一个apk来更新数据库。但你将有尽可能多的数据库文件apk,然后它将是一个更难维护。。。为什么不使用http请求/json等更新数据库?我认为你的应用程序应该在启动时连接到你的服务器。检查数据库是否需要更新。如果需要,请使用您的内容提供商更新数据库。为了更好地了解您的问题,哪些数据库包含所有这些数据库?