2014-06-20 49 views
0

我们可以允许其他应用程序访问一个应用程序的ContentProvider,但他们只能访问提供应用程序希望公开的部分数据。使用ContentProvider提供受限访问

换句话说,ContentProvider是完全访问数据还是没有数据。如果不是如何?

回答

0

答案取决于您希望其他应用程序如何访问ContentProvider中的数据。

如果您希望第三方应用程序能够在任何时间点从您的提供商那里检索数据(出于任何原因),那么正常行为是允许他们访问该提供者中的所有内容,只要他们持有正确的权限。您可以要求第三方应用程序拥有某些权限以在您的提供商中读取和/或写入数据。理论上可以使用Binder.getCallingUid()来尝试确定试图与提供者一起工作的应用程序,并基于请求者是谁来限制访问,但我没有尝试过,并且在任何情况下都可能不实际。

但是,如果你想要的第三方应用程序,从您的供应商只有当你问他们检索数据 - 通常是通过推出自己的活动之一 - 你可以访问的范围限制为单个Uri 。例如,这将是电子邮件客户端将使用的模式。某些电子邮件具有附件,电子邮件客户端想要在其他某个应用程序中打开该附件(例如PDF阅读器中的PDF附件)。电子邮件客户端将通过ContentProvider提供附件,但不允许任意访问(android:exported="false")。然后,他们将使用FLAG_ACTIVITY_GRANT_READ_PERMISSION之类的标记来启动第三方应用,以表示第三方应用可以使用Intent中的Uri从提供商检索数据。

+0

我的问题是应用程序是否可以限制对某些子数据(比如图片)的访问,同时允许通过ContentProvider访问其他子数据(联系人,视频)。 –

+0

@SrikanthReddy:恕我直言,你更好地服务创建单独的提供者。 – CommonsWare