Предоставьте доступ на чтение к FileProvider любому клиентскому приложению, не зная имени его пакета.

В контекстедля воспроизведения звука мне нужно предоставить файлы изображений через (). URI распространяются через метаданные, связанные с просмотром и воспроизведением мультимедиа. Нетвовлеченный.

Мне нужно предоставить разрешение на чтение любому клиентскому приложению, которое пытается получить доступ к файлам изображений. Насколько я могу судить, единственный способ предоставить разрешение - через. Для этого нужно знать имя пакета клиентского приложения. И это моя проблема: в то время, когда URI подготовлен и добавлен к метаданным, я не знаю (достоверно), какие приложения будут получать доступ к контенту.

Чтобы быть более конкретным: в среде Android Automotive OS системное приложение мультимедийного браузера будет просматривать мой контент. Он не будет отображать изображения, предоставленные какобъекты или изображения, представленные в виде URL-адресов в Интернете. Единственный способ заставить его отображать изображения - через URI. Я знаю имя пакета системного мультимедийного браузера во время просмотра, поэтому предоставление разрешения на чтение файла здесь работает нормально.

Но есть несколько приложений, получающих доступ к метаданным, задействованным во время воспроизведения. Например, приложение запуска отображает информацию о воспроизводимом в данный момент медиафайле. Лаунчер вылетает при попытке доступа к медиа-арту.

Я знаю имена пакетов задействованных приложений и могу просто жестко закодировать их. Думаю, мне не нужно объяснять, почему я не хочу этого делать. Я мог бы запросить имена пакетов всех приложений, установленных на устройстве (по крайней мере, я так предполагаю), но это кажется неуместным. Также теоретически дополнительные связанные приложения могут быть установлены на устройстве позже, и тогда у них не будет необходимого разрешения.

Я ищу чистый способ определить имена пакетов любого приложения, пытающегося получить доступ к моемупоэтому я могу предоставить ему разрешение на чтение. Или любым другим способом предоставить разрешение на чтение. На самом деле я вообще не хочу запрещать доступ на чтение к провайдеру, поэтому я бы предпочел экспортироватьно это уже не разрешено. Может ли кто-нибудь помочь мне здесь, пожалуйста?

1 ответ

FileProviderне поддерживает ваш сценарий из-за решений, принятых его разработчиками.

Как упоминалось в комментарии blackapps , вам нужно будет создать обычай, который будет обслуживать файлы. Затем вы можете экспортировать этого провайдера и не применять к нему разрешение на чтение. Однако будьте очень осторожны, чтобы вашContentProviderобслуживает только те файлы, которые вы хотите, и что злоумышленники не могут использовать хаки, такие как../в сегментах пути, чтобы заставить вас обслуживать файлы за их пределами.

Другие вопросы по тегам