gpt4 book ai didi

android - 如何在 Android 中查找内容提供商的调用 Activity ?

转载 作者:行者123 更新时间:2023-12-05 00:17:36 24 4
gpt4 key购买 nike

据我了解,在 Android 中,内容提供程序的实现不会也不可能不关心哪个应用程序正在请求数据。只要调用应用程序具有访问数据所需的权限,实现就应该根据所请求的 URI 返回数据。但是,我正在我的内容提供程序中尝试不同的方法,并且需要在响应数据查询之前找出哪个应用程序正在调用提供程序。我的内容提供商有办法找到这一点吗?任何帮助都感激不尽。

最佳答案

假设您只想了解是您的应用程序访问提供程序还是第三方应用程序访问提供程序,您可以调用 ContentProvider.getCallingPackage() 并查看包名称是否返回的结果与您的应用程序的包名称匹配。

编辑:对于 API 级别 18 及之前的版本,我知道有一种解决方法。这是一种解决方法,因此并不理想,但它有效:将一些额外的数据附加到 URI 中以标识您的应用程序。

例如,如果您的提供商的 URI 通常为 content://com.example.app/table1,则您的应用将使用 URI content://com。 example.app/table1/identifier。您可以为每个模式使用不同的代码,将这两个 URI 模式添加到您的 UriMatcher 中。通过合约类使不带标识符的 URI 公开可用,但将标识符保持私有(private)。第三方将根据您的合约类中公开的内容构建 URI,因此不会在 URI 中包含标识符。构造 URI 时,请包含标识符。因此,两个 URI 将指向相同的数据,但您可以根据匹配器从 match(Uri uri) 返回的代码来区分您自己的应用和第三方应用。它也不会干扰 ContentResolver,因为解析器仅检查 URI 的权限部分。同样,这假设您只关心区分来自应用程序的调用。

关于android - 如何在 Android 中查找内容提供商的调用 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25433956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com