访问内容提供者

Accessing content provider

我想使用如下形式的 URI 访问内容提供者。

sUriMatcher.addURI("org.abcd.providers.contentprovider", "bookmarks", 1)

那么,我可以使用 URI "content://org.abcd.providers.contentprovider/bookmarks" 访问它吗?值“1”是什么意思?如何查询该类型的提供者,先谢谢了。

“1”在 ContentProvider 内部使用。它用于将 URI 与数字相关联。方便在 switch 语句中使用。

为什么不使用字符串匹配?好吧,URI 可能有可变部分。例如 "content://my.provider/bank/customer/2"。 2 是客户的 Id。或者 "content://my.provider/location/42/name"。这里的可变部分是 42. 字符串匹配在这里失控了。另一方面,UriMatcher 能够将示例 1 与 addURI("my.provider", "bank/customer/#", 1) 匹配,将示例 2 与 addURI("my.provider", "location/#/name",2) 匹配。当我们要求配置的 UriMatcher 匹配 URI 时,它 returns 与匹配 URI 关联的数字。

但是我们在这里偏离了轨道。作为消费者,该号码与您无关。您可以使用上下文方法 'getContentResilver().query(content://org.abcd.providers.contentprovider/bookmarks, /*other args */)' 查询提供者。有关详细信息,请参阅 the documentation

但是,如果它已导出(对此您无能为力)或者它需要您的应用程序具有的权限,您只能与提供商交谈。这根本不包括任何权限。