如何实现只读ContentProvider?

问题描述 投票:6回答:2

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

显而易见的解决方案似乎只是返回null / 0/0,而在insert / delete / update中什么也不做。总是在这些方法中抛出Exception更好,以便清楚地表明不允许这些操作吗?还是有可能仅通过权限将对ContentProvider的访问限制为查询方法?

android permissions android-contentprovider readonly android-contentresolver
2个回答
3
投票

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

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


3
投票

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

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

我同意使用异常,因为不应该调用它,因此必须警告您。

但是发现here的一行说:

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

那会说做的好方法就是返回null / 0/0。我要用这种方式。

© www.soinside.com 2019 - 2024. All rights reserved.