1

В настоящее время я работаю над проектом, который будет отфильтровывать какой-то конкретный запрос из определенного приложения в книжки контактов Android. Мне интересно, как я могу выяснить, какое приложение обращается к поставщику контактов? Я просмотрел ссылки 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)); 
} 

Вы можете проверить, что пакет (ы) на белый список/черный список, что вы поддерживаете.

+0

Спасибо, что идея работает – user7153368