据我了解,在 Android 中,内容提供者的实现不会也不应该关注哪个应用程序正在请求数据。只要调用应用程序具有访问数据所需的权限,实现就应该根据请求的 URI 返回数据。但是,我在我的内容提供程序中尝试了一些不同的东西,并且需要在响应数据查询之前找出哪个应用程序正在调用该提供程序。我的内容提供商有什么办法可以找到这个吗?任何帮助都感激不尽。
假设您只想找出是您的应用程序访问提供程序还是第三方应用程序访问提供程序,您可以调用ContentProvider.getCallingPackage()并查看返回的包名称是否与您的应用程序的包名称匹配。
编辑:对于 API 级别 18 及之前的版本,我知道有一种解决方法。这是一种变通方法,因此并不理想,但它有效:将一些额外的数据附加到 URI 以标识您的应用程序。
因此,例如,如果您的提供者的 URI 通常是content://com.example.app/table1,则您的应用程序将使用 URI content://com.example.app/table1/identifier。您可以将两种 URI 模式添加到您UriMatcher的每个模式中,使用不同的代码。通过您的合同类公开没有标识符的 URI,但保持标识符私有。第三方将根据您的合同类中公开的内容构建 URI,因此不会在 URI 中包含标识符。构造 URI 时,请包含标识符。因此,两个 URI 将指向相同的数据,但您可以根据匹配器从match(Uri uri). 它不会干扰ContentResolver或者因为解析器只检查 URI 的授权部分。同样,这假设您只关心区分来自您的应用程序的调用。
| 归档时间: |
|
| 查看次数: |
1978 次 |
| 最近记录: |