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

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

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

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

Ответы [ 2 ]

0 голосов
/ 29 декабря 2012

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

0 голосов
/ 18 января 2012

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

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

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

...