Можно ли отправить Uri с помощью AIDL?

#java #android #kotlin #aidl

Вопрос:

У меня есть два приложения, скажем, AppClient и AppService. Эти приложения взаимодействуют друг с другом с помощью методов AIDL. Прямо сейчас я хотел бы отправить Uri из AppClient в AppService в параметре метода AIDL. Я могу отправить его без каких-либо проблем, но когда я пытаюсь открыть поток для чтения файла с помощью

 context.contentResolver.openInputStream(uriFile)
 

Я получаю исключение безопасности.
Отказ в разрешении: открытие провайдера androidx.core.content.Поставщик файлов из ProcessRecord{94e65ad 6186:com.app.service/u0a231} (pid=6186, uid=10231), который не экспортирован из uid 10043

В AppClient перед отправкой Uri с помощью метода AIDL я сначала предоставляю необходимые разрешения.

 val uri = FileProvider.getUriForFile(this,"com.app.client.fileprovider", fontFile)
grantUriPermission("com.app.service", uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION and Intent.FLAG_GRANT_READ_URI_PERMISSION)
 

В документации см., что Uri переносится в другое приложение с использованием намерений, но я не хочу использовать намерения. Можно ли отправить Uri, не используя намерение, например, в параметре AIDL ?

Комментарии:

1. Как именно вы отправляете uri? И что такое AIDL?

2. Язык определения интерфейса Android, я передаю Uri параметру метода AIDL, чтобы AppServie мог получить это в сервисе с помощью методов заглушки связующего