Как передать дескриптор сокета/файла другому приложению в Android

Можно ли передать Socket/FileDescriptor из одного действия в другое действие в другом приложении? Я пытался использовать Intent, но получил

java.lang.IllegalArgumentException: файловые дескрипторы, переданные в Intent

Пожалуйста помоги!


person Sangmin Lee    schedule 17.01.2012    source источник
comment
Конечно, вы можете использовать службу Binder.‹br› Проверьте stackoverflow.com/questions/14413810/.   -  person videoguy    schedule 21.02.2014
comment
Возможный дубликат stackoverflow.com/a/23775778   -  person Peter Tran    schedule 25.04.2016


Ответы (2)


Конечно, можно — с помощью контент-провайдеров. Вам нужно создать своего собственного поставщика контента и переопределить его метод openFile. Прочтите, например, здесь: http://www.grokkingandroid.com/handling-binary-data-with-contentproviders/

person user983447    schedule 29.12.2012

Короткий ответ: наверное, нет, но...

Действия в другом приложении выполняются в другом процессе. Я полагаю, что нет возможности передавать Socket или FileDescriptor из одного процесса в другой — ни в Java, ни в Android. Но это возможно в Linux с использованием сокетов UNIX и SCM_RIGHTS: man unix(7), cmsg (3). Поскольку Android основан на ядре Linux, вероятно, вы можете написать эту функциональность на C и передать ее в свой Java-код с помощью JNI (см. Android NDK). Возможно, вам также придется реализовать свои собственные версии Socket и FileDescriptor. Подводя итог, я думаю, что вы действительно не хотите делать все это. Наверное, лучший способ — пересмотреть свою задачу и найти другое, более простое решение.

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

person praetorian droid    schedule 18.01.2012
comment
Это в корне неверно. Привязка Java к SCM_RIGHTS существует с самой ранней версии Android. Android собственный IPC, Binder, также функциональность передачи дескрипторов с самых ранних выпусков платформы. - person user1643723; 25.04.2016