Добавление сканера штрих-кода в приложение для Android только для декодирования с использованием Zxing - PullRequest
1 голос
/ 25 января 2012

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

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

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

Спасибо за продвинутый!

1 Ответ

10 голосов
/ 25 января 2012

Самый простой способ сделать это - сканирование с помощью 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:

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

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

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

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

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

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

...