Сначала я извиняюсь за мой английский, который не так хорош :).
У меня возникла проблема при разработке приложения.
Это общая схема архитектуры моего решения.
http://i.stack.imgur.com/ooTmE.png
Чтобы быть быстрым, приложение должно декодировать код голым, но двумя возможными способами:
- с использованием внешнего устройства (конструктор предоставляет SDK, содержащий службу Android для связи с устройством),
- используйте камеру мобильного телефона с помощью библиотеки Zxing, которая позволяет управлять ею с намерением.
Цель моей службы - управлять бизнес-кодом и делать выбор инструмента для пользователя прозрачным.
Я считал, что это хорошее решение, но я хотел его реализовать, и у меня были другие проблемы.
Моя главная проблема в том, что я не могу выполнить StartActivityForResult внутри службы.
Есть ли у кого-нибудь предложения по моей проблеме, будь то изменение архитектуры или решение основной проблемы?
@ Laurent ': Вы имеете полное право на то, что мой сервис выступает в роли адаптера API.
Я постараюсь прояснить ожидаемое поведение.
У меня есть приложение, которое должно распознавать (реальные) объекты с QR-кодами сверху. Это действие по распознаванию будет выполнено пользователем несколько раз в течение жизни приложения.
Пользователь выбирает запуск распознавания, нажимая кнопку (или иным образом, но он знает, что распознавание начнется). Поэтому уведомление не требуется.
Дело в том, что он не выбирает способ сделать признание. Вот почему, как вы сказали, я реализую адаптер.
Адаптер выбирает между:
Камера мобильного или внешнего устройства. Первое - это поступление из библиотеки Zxing. Второй - это сервис, который управляет внешним устройством. Этот сервис предоставляет интерфейс для возврата результата.
Еще одна вещь, мне нужно, чтобы вся моя реализация (adapter and co) могла быть повторно использована другими приложениями, которые также должны будут выполнять распознавание.
Поэтому я подумал о том, чтобы реализовать службу в качестве адаптера, отвечающего двум моим условиям (сделать прозрачным выбор для пользователя и сделать распознавание доступным для других приложений).
Надеюсь, вы понимаете мою проблему.