Поддержка нескольких приложений на внешнем аксессуаре с использованием протокола внешнего аксессуара iOS

Мы разрабатываем внешний аксессуар MFi, на котором мы можем запускать приложения iOS с iPhone с помощью протокола внешнего аксессуара. Мы используем протокол Ford Smartdevicelink для регистрации приложений. Мы используем USB в качестве средства связи между аксессуаром и iPhone. В настоящее время мы можем запустить одно приложение на аксессуаре. Мы хотели бы запустить несколько приложений одновременно. Но мы поражены здесь. Пожалуйста, предоставьте некоторые данные о том, как мы можем это сделать. А

Проблема, с которой мы сталкиваемся, заключается в том, что если одно приложение уже запущено в аксессуаре и iPhone, если мы запускаем другое приложение в iPhone, в то время как предыдущее приложение находится в фоновом режиме, аксессуар получает «StopExternalAccessoryProtocolSession» для фонового приложения. Следовательно, фоновое приложение становится нефункциональным, и, следовательно, одновременно работает только одно приложение. Для нового запущенного приложения мы получаем «StartExternalAccessoryProtocolSession», и оно становится функциональным.

Также мы используем один идентификатор протокола для всех приложений. Должны ли мы использовать разные протоколы для всех приложений для поддержки нескольких приложений? или Если мы сможем добиться этого с помощью единого идентификатора протокола, пожалуйста, предоставьте информацию о том, как мы можем этого добиться.?


person Shivakumar    schedule 29.12.2015    source источник


Ответы (2)


Я сопровождаю SDL-iOS.

Для SDL мы решили эту проблему, позволив использовать до 30 строк протокола. Приложение будет искать поток com.smartdevicelink.prot0 и подключаться. Он получит один байт данных 0x01 - 0x1E от аксессуара того протокола данных, к которому следует подключиться.

Это список строк протокола SDL. .

ОТРЕДАКТИРОВАНО, чтобы исправить ошибочное утверждение.

person Joel Fischer    schedule 25.02.2016
comment
На стороне приложения мы включаем все протоколы, которые вы упомянули выше. Что нужно сделать со стороны аксессуаров? Я также включаю все протоколы на стороне аксессуаров, но по-прежнему не могу запускать несколько приложений. - person Shivakumar; 25.02.2016
comment
Взгляните на класс SDLIAPTransport проекта sdl_ios. Приложение сначала попытается подключиться к протоколу управления com.smartdevicelink.prot0. Он должен получить один байт данных, указывающий, на какой протокол данных переключиться (com.smartdevicelink.prot1 - 30). Если вам нужна дополнительная помощь, есть ссылка на слабину из репозиториев github. - person Joel Fischer; 25.02.2016

Внешний аксессуар имеет поток данных, который можно прочитать только один раз. Для аналогичной проблемы я реализовал сервер сокетов, который мог отправлять данные, считанные с аксессуара, через tcp или udp, поэтому у меня просто было основное приложение, которое общалось с внешним аксессуаром и действовало как прокси для других приложений (приложение, о котором я говорю является NMEA Gps и позволяет другим приложениям подключаться к внешнему GPS от двойной электроники)

person atrebbi    schedule 29.12.2015
comment
Упомянутый вами метод был сделан для Android. А вот iOS мы сделать не в состоянии. Вы внедрили прокси-приложение для iOS или Android? - person Shivakumar; 30.12.2015
comment
iOS, это приложение: itunes.apple.com/it /app/nmea-gps/id590868529?mt=8 - person atrebbi; 23.02.2016