我们是否可以允许其他应用程序访问一个应用程序的ContentProvider,但它们只能访问提供应用程序想要公开的部分数据。
换句话说,ContentProvider可以提供对数据的完全访问权限,也可以不提供数据。如果不是如何?
答案 0 :(得分:0)
答案取决于您希望其他应用程序如何访问ContentProvider
中的数据。
如果您希望第三方应用程序能够出于任何原因在任何时间点从您的提供商处检索数据,那么正常的行为是允许他们访问该提供商中的所有内容,只要他们持有正确的权限。您可以要求第三方应用程序保留某些权限,以便在您的提供程序中读取和/或写入数据。理论上可以使用Binder.getCallingUid()
来尝试确定试图与您的提供商合作的应用程序,并以某种方式根据请求者的身份限制访问,但我没有尝试过这个,它可能不实用无论如何。
但是,如果您希望第三方应用程序仅在您要求提供时从提供商检索数据 - 通常是通过启动其中一项活动 - 您可以限制访问范围到一个Uri
。例如,这将是电子邮件客户端将使用的模式。某些电子邮件具有附件,电子邮件客户端希望打开这些附件以便在其他应用程序中查看(例如,PDF查看器中的PDF附件)。电子邮件客户端将通过ContentProvider
提供附件,但不允许任意访问(android:exported="false"
)。然后,他们会在用于启动第三方应用的FLAG_ACTIVITY_GRANT_READ_PERMISSION
上使用Intent
之类的标记来表示第三方可以使用Uri
中的Intent
- 派对应用程序从提供程序检索数据。