1

我目前正在研究一个项目,它将从特定应用程序中筛选出一些特定的查询,以便安卓通讯录。我想知道如何找出哪个应用程序访问联系人提供程序?我已经浏览了API参考,但它看起来只有获取内容提供者客户端的方法,而不是获取要求访问数据的应用程序。如果有人能解释这一点,这将是很大的帮助!提前致谢!Android:如何找出内容解析器的客户端

+0

'ContentResolver'没有“客户端”,至少在我将如何使用该术语方面。 – CommonsWare

+0

我试图说应用程序正在调用内容解析器。有没有任何名称? – user7153368

+0

我会调用ContentProvider的客户端。 – CommonsWare

回答

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)); 
} 

然后,您可以检查包(S)是在白名单上/你保持黑名单。

+0

感谢这个想法 – user7153368