我想知道如何最好地实现只读的ContentProvider。 我希望我的数据源只能通过我的ContentProvider的其他特殊方法(我当然无法通过ContentResolver访问)在我自己的应用程序中进行修改。 换句话说,其他应用程序应该只能使用我的ContentProvider的查询方法,但不能插入,删除或更新。
显而易见的解决方案似乎是返回null / 0/0并且在insert / delete / update中不执行任何操作。是不是总是在这些方法中抛出异常,以便清楚地表明不允许这些操作?或者是否有可能仅通过权限限制对ContentProvider的访问?
答案 0 :(得分:3)
实现此目的的一种方法是通过安全权限,您可以在ContentProvider段落中的this link访问该权限。具体来说,您可以在AndroidManifest xml文件中为您的提供商设置writePermission 。
但是,如果您不想使用安全权限,则可以使用第二段中提到的方法。我建议抛出异常,以便很明显无法访问那些特定的插入/更新/删除功能。
答案 1 :(得分:3)
两年后,我问自己同样的问题。 我知道权限就是答案。
尽管如此,你必须在“插入/删除/更新”方法中写一些内容(希望无法调用)。
我同意使用例外,因为它不应该被调用,如果是,你必须得到警告。
但成立了一条线here:说
虽然您必须实现这些方法,但您的代码并非如此 做任何事情,除了返回预期的数据类型。例如,你可以 想阻止其他应用程序将数据插入某些应用程序 表。为此,您可以忽略对insert()的调用并返回0。
这就是说好的方法就是返回null / 0/0。我会用这种方式。
我不确定是否值得在这样一个小问题上花时间。