Предоставьте доступ на чтение к FileProvider любому клиентскому приложению, не зная имени его пакета.
В контексте
Мне нужно предоставить разрешение на чтение любому клиентскому приложению, которое пытается получить доступ к файлам изображений. Насколько я могу судить, единственный способ предоставить разрешение - через
Чтобы быть более конкретным: в среде Android Automotive OS системное приложение мультимедийного браузера будет просматривать мой контент. Он не будет отображать изображения, предоставленные как
Но есть несколько приложений, получающих доступ к метаданным, задействованным во время воспроизведения. Например, приложение запуска отображает информацию о воспроизводимом в данный момент медиафайле. Лаунчер вылетает при попытке доступа к медиа-арту.
Я знаю имена пакетов задействованных приложений и могу просто жестко закодировать их. Думаю, мне не нужно объяснять, почему я не хочу этого делать. Я мог бы запросить имена пакетов всех приложений, установленных на устройстве (по крайней мере, я так предполагаю), но это кажется неуместным. Также теоретически дополнительные связанные приложения могут быть установлены на устройстве позже, и тогда у них не будет необходимого разрешения.
Я ищу чистый способ определить имена пакетов любого приложения, пытающегося получить доступ к моему
1 ответ
FileProvider
не поддерживает ваш сценарий из-за решений, принятых его разработчиками.
Как упоминалось в комментарии blackapps , вам нужно будет создать обычай, который будет обслуживать файлы. Затем вы можете экспортировать этого провайдера и не применять к нему разрешение на чтение. Однако будьте очень осторожны, чтобы вашContentProvider
обслуживает только те файлы, которые вы хотите, и что злоумышленники не могут использовать хаки, такие как../
в сегментах пути, чтобы заставить вас обслуживать файлы за их пределами.