我目前正在研究一个项目,该项目将从特定的应用程序过滤到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));
}
然后,您可以检查软件包是否在您维护的白名单/黑名单中。