Самый простой способ сделать это - сканирование с помощью 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 делает это таким, чтобы отладка и исправление выполнялись людьми, которые на самом деле знают все о том, как это работает и какие проблемы нужно решать, и работают по собственному расписанию обновлений. Так что эти исправления выйдут в массы гораздо быстрее, чем вы могли бы их получить.