Android: 如何找出内容解析器的客户端
Android: How to figure out the client of content resolver
我目前正在从事一个项目,该项目将过滤掉来自特定应用程序的某些特定查询到 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));
}
然后您可以检查包是否在您维护的 whitelist/blacklist 上。
我目前正在从事一个项目,该项目将过滤掉来自特定应用程序的某些特定查询到 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));
}
然后您可以检查包是否在您维护的 whitelist/blacklist 上。