7

我想知道如何最好地实现一个只读的 ContentProvider。我希望我的数据源只能通过我的 ContentProvider 的其他特殊方法在我自己的应用程序中进行修改(当然不能通过 ContentResolver 访问这些方法)。换句话说,其他应用程序应该只能使用我的 ContentProvider 的查询方法,而不能插入、删除或更新。

显而易见的解决方案似乎是只返回 null/0/0 而在插入/删除/更新中什么也不做。总是在这些方法中抛出一个异常,以便清楚地传达这些操作是不允许的,会更好吗?或者是否有可能仅通过权限将对 ContentProvider 的访问限制为查询方法?

4

2 回答 2

4

两年后,我问自己同样的问题。我知道权限就是答案。

尽管如此,您必须在“插入/删除/更新”方法中编写一些内容(希望不会被调用)。

我同意使用异常,因为它不应该被调用,如果是,你必须被警告。

但是在这里找到的一行

尽管您必须实现这些方法,但您的代码除了返回预期的数据类型外无需执行任何操作。例如,您可能希望阻止其他应用程序将数据插入某些表中。为此,您可以忽略对 insert() 的调用并返回 0。

也就是说,最好的方法就是返回 null/0/0。我要用这种方式。

于 2013-11-11T18:03:48.977 回答
3

实现此目的的一种方法是通过您可以在 ContentProvider 段落中的此链接访问的安全权限。具体来说,您将在您的 AndroidManifest xml 文件中为您的提供程序设置一个writePermission

但是,如果您不想使用安全权限,则可以使用第二段中提到的方法。我建议抛出异常,以便清楚地表明无法访问那些特定的插入/更新/删除功能。

于 2012-01-31T19:51:53.320 回答