我目前正在开发一个项目,该项目将过滤掉从特定应用程序到Android联系人书籍的特定查询。我想知道如何确定哪个应用程序正在访问联系人提供商?我查看了API参考资料,但看起来只有获取内容提供商客户端的方法,而不是获取要求访问数据的应用程序。如果有人能解释一下,那将是很有帮助的!提前致谢!
答案 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));
}
然后,您可以检查软件包是否在您维护的白名单/黑名单中。