Android:如何找出内容解析器

时间:2016-11-13 16:08:53

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

我目前正在开发一个项目,该项目将过滤掉从特定应用程序到Android联系人书籍的特定查询。我想知道如何确定哪个应用程序正在访问联系人提供商?我查看了API参考资料,但看起来只有获取内容提供商客户端的方法,而不是获取要求访问数据的应用程序。如果有人能解释一下,那将是很有帮助的!提前致谢!

1 个答案:

答案 0 :(得分: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));
}

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