【问题标题】:Android: How to figure out the client of content resolverAndroid:如何找出内容解析器的客户端
【发布时间】:2016-11-13 16:08:53
【问题描述】:

我目前正在开展一个项目,该项目将过滤掉从特定应用到 Android 通讯录的某些特定查询。我想知道如何确定哪个应用程序正在访问联系人提供程序?我查看了 API 参考,但似乎只有获取内容提供者客户端的方法,而不是获取请求访问数据的应用程序。如果有人可以解释一下,那将是很大的帮助!提前致谢!

【问题讨论】:

  • A ContentResolver 没有“客户”,至少就我如何使用该术语而言。
  • 我想说的是应用程序正在调用内容解析器。有什么名字吗?
  • 我称之为ContentProvider的客户端。
  • ContentProvider的客户端不是查询试图访问的数据库吗?
  • 不是我如何使用“客户”一词。这类似于称 MySQL 为 Web 浏览器,因为 Web 服务器的客户端是数据库。

标签: android android-contentprovider android-contacts android-source android-contentresolver


【解决方案1】:

从您的ContentProvider,您可以像这样获取调用您的应用程序的包名称:

@NonNull
private static Collection<String> getCallingPackages(Context context) {
    int callingUid = Binder.getCallingUid();
    if (callingUid == 0) {
        return Collections.emptyList();
    }

    String[] packages = context.getPackageManager().getPackagesForUid(callingUid);

    return new ArrayList<>(Arrays.asList(packages));
}

然后,您可以检查软件包是否在您维护的白名单/黑名单中。

【讨论】:

    猜你喜欢
    • 2012-01-18
    • 1970-01-01
    • 2020-09-17
    • 2013-05-01
    • 2020-07-22
    • 2011-02-06
    • 1970-01-01
    • 2023-01-23
    • 2012-04-02
    相关资源
    最近更新 更多