Android二維碼開(kāi)發(fā)(一)基本實(shí)現(xiàn)

[TOC]

前言

最近在做一些Android組件的編寫(xiě),掃描二維碼是Android中很常用的組件,因此在參考了前人開(kāi)發(fā)經(jīng)驗(yàn)的基礎(chǔ)上對(duì)這部分知識(shí)進(jìn)行一個(gè)總結(jié),有錯(cuò)誤之處還請(qǐng)大神之處,由于會(huì)詳細(xì)介紹封裝過(guò)程,博文比較長(zhǎng),分成三篇

本次二維碼開(kāi)發(fā)是基于zxing-android-embedded這個(gè)庫(kù)的基礎(chǔ)上進(jìn)行開(kāi)發(fā)。這個(gè)庫(kù)是在谷歌zxing庫(kù)的基礎(chǔ)上對(duì)一些方法進(jìn)行了封裝,更方便開(kāi)發(fā)者調(diào)用。

一、二維碼基本功能實(shí)現(xiàn)

導(dǎo)入zxing-android-embedded和zxing核心庫(kù) 由于我使用Android studio開(kāi)發(fā) 因此采用gradle

 compile 'com.journeyapps:zxing-android-embedded:3.4.0'
 compile 'com.google.zxing:core:3.2.1'

掃碼

    /**
     * 開(kāi)啟掃描界面
     *
     * @param view
     */
    public void start(View view) {
        new IntentIntegrator(this)
                .setOrientationLocked(false)
                .setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES)
                .setPrompt("將二維碼/條碼放入框內(nèi),即可自動(dòng)掃描")
                .initiateScan(); // 初始化掃描
    }
                
                
        
       
    /**
    *在onActivityResult中接收掃描結(jié)果
    */
      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
            String result = intentResult.getContents();
    }            
                
  • 效果()
normal_scanner.png

生成二維碼Bitmap

public static Bitmap createQRBitmap(String context) {
        Bitmap bitmap = null;
        BitMatrix matrix = null;
        MultiFormatWriter writer = new MultiFormatWriter();
        try {
            //設(shè)置格式
            Map<EncodeHintType, Object> encodeHintTypeMap = new HashMap<>();
            //設(shè)置二維碼邊空白的寬度
            encodeHintTypeMap.put(EncodeHintType.MARGIN,2);
            matrix = writer.encode(context, BarcodeFormat.QR_CODE, 400, 400, encodeHintTypeMap);//400表示生成bitmap大小

            BarcodeEncoder encoder = new BarcodeEncoder();
            bitmap = encoder.createBitmap(matrix);
           
        } catch (Exception e) {
            e.printStackTrace();
        }

        return bitmap;
    }    
   
       

識(shí)別圖中二維碼

 /**
     * 識(shí)別bitmap中的二維碼信息
     *
     * @param bitmap
     * @return
     */
    public static Result spotQRcode(Bitmap bitmap) throws FormatException, ChecksumException, NotFoundException {
        Result result = null;
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        int[] data = new int[width * height];

        bitmap.getPixels(data, 0, width, 0, 0, width, height);
        RGBLuminanceSource source = new RGBLuminanceSource(width, height, data);


        BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));


        QRCodeReader reader = new QRCodeReader();
        //result中包含了掃描到的信息,調(diào)用 result.getText()可以獲取到文本信息
        result = reader.decode(binaryBitmap);
        return result;
    }
  • 效果
create_qr_bm.gif

總結(jié)

這篇文章主要講解了二維碼三個(gè)基本功能的實(shí)現(xiàn),下一篇將講解對(duì)這些功能的封裝優(yōu)化,如果錯(cuò)誤還請(qǐng)指正,感謝。

demo下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,741評(píng)論 25 709
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,835評(píng)論 2 45
  • 《古鎮(zhèn)》 青石筑小徑, 雕欞妝紅樓。 舊杏招新客, 老巷藏清幽。 墻頭苔痕綠, 橋下烏篷瘦。 溪短憶流年, 夜長(zhǎng)知更漏。
    bluebox閱讀 1,017評(píng)論 0 1
  • 1. 前幾天跟幾個(gè)朋友小聚,席間談到男女感情,有個(gè)姑娘頗有心得的說(shuō):“女孩子啊,千萬(wàn)不能秒回男朋友的消息,即便看見(jiàn)...
    顧一宸閱讀 5,546評(píng)論 82 178
  • 矢車(chē)菊:很特別的名字,花語(yǔ)讓人喜歡,故事也挺有趣的,對(duì)皮膚、發(fā)質(zhì)、眼部都有挺不錯(cuò)的效果。保濕+撫平魚(yú)尾紋+洗眼液
    WoWkx閱讀 471評(píng)論 0 0

友情鏈接更多精彩內(nèi)容