2012-01-25 3 views
1

Я искал, как добавить сканер штрих-кода в мое приложение, чтобы декодировать штрих-коды. Я нашел действительно хорошее приложение, которое я мог бы связать, чтобы сделать это под названием «Zxing», но единственная проблема заключается в том, что он имеет кодировку и декодирование, но то, что я действительно хочу, - это только декодирование, чтобы я мог ограничить то, что я использую из файла с открытым исходным кодом Zxing.Добавление сканера штрих-кода в приложение для Android для декодирования с использованием Zxing

Я искал множество мест, которые не смогли найти только декодирование с помощью zxing?

Итак, мой вопрос: как использовать Zxing только для декодирования, а не для кодирования? Примерные коды и пошаговые инструкции будут действительно оценены.

Спасибо!

+1

В ваших исследованиях вы столкнулись с вопросом [this] (http://stackoverflow.com/q/2050263/1101070)? –

ответ

10

Простейший способ сделать это - scan via Intent.

вот некоторые примеры кода:

//This intent will ask the Barcode Scanner app to scan a code and give us the result 
Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 

/* you can optionally add an extra to the intent that tells it what type of code its looking for. Like this: 
* 
* intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
* 
* If you don't put that in it will scan all types. 
*/ 

startActivityForResult(intent, 0); 

Затем в onActivityResult() вы можете получить отсканированные данные, как это:

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (requestCode == 0) { 
     if (resultCode == RESULT_OK) { 
      // contents contains whatever was encoded 
      String contents = intent.getStringExtra("SCAN_RESULT"); 

      // Format contains the type of code i.e. UPC, EAN, QRCode etc... 
      String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 


     } 
    } 

} 

EDIT:

Намерение модель построена в самой основной идее андроида. И это было сделано по уважительной причине. Имея только одно приложение, которое обрабатывает сканирование штрих-кодов и просто возвращает результат в любое другое приложение, которое хочет его использовать, мы получаем меньше потраченного впустую пространства.

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

Еще одна проблема с моделью Intent (в частности, с декодированием штрих-кода) заключается в том, что она позволяет вашему приложению требовать меньше разрешений. Потому что вам больше не нужен доступ к камере.

Он также делает все гораздо проще для разработчика. Как вы можете видеть выше, объем усилий, необходимых для интеграции с zxing с помощью намерения, минимален. Вы обнаружите, что можно повторно использовать некоторые части проекта Zxing и включить их в свое приложение. Но гораздо труднее вставать и работать.

ZXing project is open sourced так что вы, конечно же, можете начать собирать источник, чтобы выяснить, какие классы вам нужно будет вручную скопировать в ваш проект. Я предлагаю, если вы намереваетесь пойти по этому маршруту, что при первой попытке вы не пытаетесь удалить функции кодирования. Получите все и работайте, а затем начните удалять вещи. Вполне вероятно, что если вы попытаетесь использовать только некоторые подмножества проекта, некоторые вещи не будут функционировать должным образом, даже если они не кажутся, что они должны быть затронуты тем, что вы оставили.

Последний совет, я полностью понимаю, почему вы хотите включить эту функциональность в свое приложение (я был там сам). Но не принимайте это решение легко и занимайте некоторое время, чтобы рассмотреть такие вещи: Допустим, вы включили эту функциональность в свое приложение. Все идет хорошо на некоторое время. Но через некоторое время вы начинаете видеть странные ошибки, возникающие на некоторых устройствах, из-за которых они не могут использовать функции сканирования вашего приложения.Теперь вы окажетесь в ситуации, когда вам придется попытаться отладить и исправить то, что вы не создали, и, вероятно, не полностью понимаете все, что происходит под капотом. В то время как интеграция с Intents делает это так, что эта отладка и исправление выполняются людьми, которые действительно знают каждый бит о том, как это работает и какие проблемы нужно решать, и они работают над своим собственным графиком обновления. Таким образом, эти исправления выйдут в массы намного быстрее, чем вы могли бы получить их.

+0

Но проблема в сканировании через намерение будет означать, что пользователю придется загружать Zxing отдельно, но я хочу проинтегрировать его вместе и только декодировать – Sri

+0

. Я не вижу, чтобы они загружали сканер штрих-кода отдельно как «проблему». Эта модель поддерживает приложения, ориентированные на то, что они делают лучше всего, и оставляет более сложные задачи (сканирование штрих-кода, выбор аудиофайла, выбор изображения галереи и т. Д.) На то, что было специально разработано для выполнения этой точной задачи. Намерения и эта модель очень важны для идеи андроида. Так система должна была работать =). См. Мое редактирование для получения дополнительной информации. – FoamyGuy