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

最佳答案

在您的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));
}


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

09-25 23:21