#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 мог получить это в сервисе с помощью методов заглушки связующего