Простейший способ сделать это - 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 делает это так, что эта отладка и исправление выполняются людьми, которые действительно знают каждый бит о том, как это работает и какие проблемы нужно решать, и они работают над своим собственным графиком обновления. Таким образом, эти исправления выйдут в массы намного быстрее, чем вы могли бы получить их.
В ваших исследованиях вы столкнулись с вопросом [this] (http://stackoverflow.com/q/2050263/1101070)? –