
рд▓реЗрдЦ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХреНрдпреВрдЖрд░ рдХреЛрдб (рдпрд╛ рдмрд╛рд░рдХреЛрдб) рдХреЗ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдФрд░ / рдпрд╛ рд╕реНрдХреИрдирд░ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рддрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЫреЛрдЯреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред
QR рдХреЛрдбреНрд╕ рдиреЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдмрд╛рд░ рдХреЛрдбреНрд╕ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ (рдЗрд╕рдХреЗ рдмрд╛рдж "рдмрд╛рд░ рдХреЛрдб" рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рд╣рдорд╛рд░реЗ рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирддреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рд▓рд┐рдВрдХ рдХреЗ рджрд░реНрдЬрдиреЛрдВ рд╕реЗ рд╕рд╛рдЗрдЯ рдкрд░ рд▓рд┐рдВрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ, рдЬрдЯрд┐рд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдЦрд░реАрдж рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдк рд▓реЗрдЦ рд╕реЗ рдПрдХ рдХреНрдпреВрдЖрд░ рдХреЛрдб рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ
рдкрдврд╝реЗрдВ рдХреНрдпреВрдЖрд░ рдХреЛрдбрдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ 2 рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
QR рдХреЛрдб рд╕реНрдХреИрди рдХрд░реЗрдВ
ZBar рдмрд╛рд░ рдХреЛрдб рд░реАрдбрд░ рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдХреИрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддреЛ
рдЪрд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ:
- рдкреНрд░реЛрдЬреЗрдХреНрдЯ zbar.jar рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
- рдореВрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ libiconv.so рдФрд░ libzbarjni.so рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХреИрдорд░реЗ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ
рд╕рдордпред - рд╣рдо рд╕реНрдореГрддрд┐ рдореЗрдВ рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ
static { System.loadLibrary("iconv"); }
- рд╕реНрдХреИрдирд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ
scanner = new ImageScanner(); scanner.setConfig(0, Config.X_DENSITY, 3);
- рдЕрдЧрд▓рд╛, рд╣рдо рдХреИрдорд░реЗ рдХреЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдирдП рдлреНрд░реЗрдо рдХреЛ рд╕реНрдХреИрдирд░ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ
PreviewCallback previewCb = new PreviewCallback() { public void onPreviewFrame(byte[] data, Camera camera) { String lastScannedCode; codeImage.setData(data); int result = scanner.scanImage(codeImage); if (result != 0) { SymbolSet syms = scanner.getResults(); for (Symbol sym : syms) { lastScannedCode = sym.getData(); } } } }
- рдирддреАрдЬрддрди, lastScannedCode рдореЗрдВ рд╣рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо = scanner.scanImage (codeImage) рдХрднреА-рдХрднреА рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рддрдм рднреА рдЬрдм рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рдордиреЗ рдХреЛрдИ рдХреНрдпреВрдЖрд░ рдХреЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдХреИрдорд░рд╛ рдХрднреА-рдХрднреА рд╕рд╛рдорд╛рдиреНрдп рдзреБрдВрдзрд▓реА рддрд╕реНрд╡реАрд░ рдореЗрдВ рднреА рдХреБрдЫ рдкрд╣рдЪрд╛рди рд▓реЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдХреЛрдб рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рд╛рд░реВрдк рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рд╣рдо рдХреНрдпреВрдЖрд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
ZXing рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрдирдкреБрдЯ
рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдПрдирдХреЛрдбреИрдЯреНрд╕рдмрд┐рдЯрдореИрдк : рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЯреЗрдХреНрд╕реНрдЯ рдпрд╛ рдХреЛрдб, рдЬрд┐рд╕ рдорд╛рдирдХ рдХреЛ рд╣рдо рдПрдирдХреЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЖрдЙрдЯрдкреБрдЯ рдЗрдореЗрдЬ рдХрд╛ рдЖрдХрд╛рд░ред
Bitmap barcode_bitmap = encodeAsBitmap(text, BarcodeFormat.QR_CODE, 200, 200); targetImageView.setImageBitmap(barcode_bitmap); private static Bitmap encodeAsBitmap(String contents, BarcodeFormat format, int img_width, int img_height) throws WriterException { String contentsToEncode = contents; if (contentsToEncode == null) { return null; } Map<EncodeHintType, Object> hints = null; String encoding = guessAppropriateEncoding(contentsToEncode); if (encoding != null) { hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class); hints.put(EncodeHintType.CHARACTER_SET, encoding); } MultiFormatWriter writer = new MultiFormatWriter(); BitMatrix result; try { result = writer.encode(contentsToEncode, format, img_width, img_height, hints); } catch (IllegalArgumentException iae) {
рдмрд╛рд░рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рд╕реНрдХреИрдирд░
рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рднреА рд╕рдВрд╢реЛрдзрди рдХреЗ рдмрд┐рдирд╛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░рдХреЛрдб рдХреЛ рд╕рдордЭрддрд╛ рд╣реИред
рдЬрдирд░реЗрдЯрд░ рдХреЛ рди рдХреЗрд╡рд▓ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ:
рдПрдиреНрдХреЛрдбреЛрдбрдмрд┐рдЯрдореИрдк рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ,
рд╣рдо рдмрд╛рд░рдХреЛрдбрдлрд╝реЙрд░реНрдореИрдЯ.рдХреНрдпреВрдЖрд░_рдХреЙрдб рдХреЗ рдмрдЬрд╛рдп
рдкреНрд░рд╛рд░реВрдк рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╛рд░рдХреЛрдбрдлрд╝реЙрд░реНрдореИрдЯ.рдХреЛрдбреЗ_128 рдХреА рддрд░рд╣ рдХреБрдЫ, рдЬреЛ
рдХреЛрдб 128 рдорд╛рдирдХ рдмрд╛рд░рдХреЛрдб рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛
рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рдЕрдВрддрд┐рдо рджреЛ
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдХрд┐ рд╡рд┐рдзрд┐ рдирд╣реАрдВ
public void onPreviewFrame(byte[] data, Camera camera) { codeImage.setData(data); .... }
рд▓рдЧрд╛рддрд╛рд░ рдореЗрдореЛрд░реА рдЦреЛ рджреЗрддрд╛ рд╣реИ (рдПрдХ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реИ) рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХреИрдорд░реЗ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдирдП рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдлреНрд░реЗрдо рдкрд░ рдлреНрд░реЗрдо рдмрдлрд░ рд▓рдЧрд╛рддрд╛рд░ рдмрдирд╛рдпрд╛ рдФрд░ рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдлрд╝реНрд░реЗрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдмрдлрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХрдмрдлрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреИрдорд░реЗ рд╕реЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдЫрд╡рд┐ рдХреЗ рдлреНрд░реЗрдо рджрд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди! , рдореБрдЭреЗ рдПрдХ рдлреЛрди рдореЙрдбрд▓ рдорд┐рд▓рд╛ рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдмрдлрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЛ рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред
рдмрд╛рд░рдХреЛрдб рдЬреЗрдирд░реЗрд╢рди рдореЗрдВ рдЪрдпрдирд┐рдд рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ: рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░, рдЕрдиреБрдордд рд╡рд░реНрдг, рдЖрджрд┐ред
рд░реИрдЦрд┐рдХ рдмрд╛рд░рдХреЛрдб рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЬрд╛рдиреЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдмрд╛рд░рдХреЛрдб рд╕реНрдЯреЛрд░ рд╕реНрдХреИрдирд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИрдВ
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЧреНрд░реИрдб рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ .so рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрджрдо: рдирд┐рдореНрди рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЬрд╛рд░ iconv.jar рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:
- рджреЗрдп /
- lib / x86
- lib / armeabi
- lib / armeabi-v7a
рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрд╕рдХреЗ рдЦрдВрдб рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
рд╕рдВрдХрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓реЗрдВ ('libs / iconv.jar')
рдпрд╛, рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╡рд┐рдХрд▓реНрдк, рддрд╛рдХрд┐ рдЕрд▓рдЧ рд╕реЗ рд╕рднреА JAR рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рди рдХрд░реЗрдВ:
dependencies { compile fileTree(dir: 'lib', include: '*.jar') }
рдпреБрдкреАрдбреАред
GitHub рдкрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ (рдПрдХ рдмреЛрддрд▓ рдореЗрдВ рдЬрдирд░реЗрдЯрд░ рдФрд░ рд╕реНрдХреИрдирд░):
