? ? ? ?掃描二維碼的功能在現(xiàn)在的生活中已經(jīng)離不開了伍绳,支付購物或者是添加優(yōu)惠券的時(shí)候都會(huì)有用到。這不最近公司的項(xiàng)目需求就有了這個(gè),公司是賣電影票的踩叭,全國(guó)幾十家連鎖電影院,每個(gè)月都會(huì)發(fā)一些電影優(yōu)惠券或者兌換券給顧客(公司的線上活動(dòng)觀影福利和優(yōu)惠力度還是挺大的)翠胰,為了不讓顧客手動(dòng)輸入那么長(zhǎng)的一段優(yōu)惠券碼容贝,提高用戶體驗(yàn),就做了掃描二維碼或者條形碼直接識(shí)別優(yōu)惠券號(hào)的功能亡容,方便了用戶嗤疯,提高了用戶體驗(yàn)。
? ? ? 上GitHub上找Zxing的源碼(Zxing源碼地址)看了看實(shí)在是太繁瑣太復(fù)雜了闺兢,光是從里面去抽取代碼就會(huì)用很長(zhǎng)的時(shí)間茂缚,所以想找找看有沒有精簡(jiǎn)版的,我們這里只需要掃描識(shí)別就行了屋谭,不需要太多復(fù)雜的功能脚囊,然后就又找了找發(fā)現(xiàn)了這個(gè)(精簡(jiǎn)ZXing項(xiàng)目后只保留掃描功能的代碼,去除了ViewfinderView,使用XML布局)桐磁,代碼簡(jiǎn)單又好用悔耘,果斷下載下來,直接導(dǎo)入jar包我擂,然后拷貝相應(yīng)的功能代碼就可以了衬以。
? ? ? 代碼如下(項(xiàng)目開發(fā)用的是Eclipse ADT):
精簡(jiǎn)版zxing項(xiàng)目下載下來目錄結(jié)構(gòu)如下,
? ? ? 這個(gè)精簡(jiǎn)版的zxing目錄結(jié)構(gòu)簡(jiǎn)單明了校摩,然后直接把jar包導(dǎo)入看峻,再把camera、decode衙吩、utils幾個(gè)包導(dǎo)入到自己的項(xiàng)目互妓,這幾個(gè)包里面分別是,相機(jī)的應(yīng)用管理類坤塞、二維碼解析的類冯勉、手機(jī)振動(dòng)和聲音的管理類、還有一些回調(diào)的方法(導(dǎo)入這幾個(gè)包的時(shí)候摹芙,最好是自己新建一個(gè)包單獨(dú)放二維碼掃描的方法灼狰,利于管理和方便查看)。然后導(dǎo)入相應(yīng)的資源文件浮禾,再把AndroidManifest中相應(yīng)的權(quán)限都添加上去交胚。
? ? ?在說一下項(xiàng)目要實(shí)現(xiàn)的功能和流程坛悉,請(qǐng)看圖:
添加優(yōu)惠券的時(shí)候點(diǎn)擊彈出框的左上角,然后進(jìn)入二維碼掃描界面承绸,這段代碼就是簡(jiǎn)單的跳轉(zhuǎn):
由于是掃描完成以后要把獲取到的掃描結(jié)果填入到EditText的輸入框中裸影,所以用了startActivityForResult()方法,傳入?yún)?shù)军熏,然后回傳數(shù)據(jù)轩猩。CaptureActivity就是掃描的界面了,這個(gè)類中handleDecode方法可以解析二維碼并傳回我們想要的數(shù)據(jù):
然后再在前一個(gè)界面的onActivityResult(int requestCode, int resultCode, Intent data)方法中去取我們想要的數(shù)據(jù)就好了荡澎。
需要注意的是均践,一定要在AndroidManifest中配置相應(yīng)的權(quán)限和supports-screens,supports-screens這個(gè)元素用于指定應(yīng)用程序所支持的屏幕尺寸摩幔,并針對(duì)比應(yīng)用程序所支持的屏幕還要大屏幕彤委,啟用屏幕兼容模式。在應(yīng)用程序中使用這個(gè)元素指定應(yīng)用程序所支持的屏幕尺寸是至關(guān)重要的或衡。剛開始配置的時(shí)候忘了這個(gè)參數(shù)焦影,由于是從彈出框跳轉(zhuǎn)到掃描界面,所以沒配置的時(shí)候的掃描界面的寬度就跟我上面的彈出框的寬度一樣了封断,不是全屏的斯辰,這顯然是不行的。參數(shù)配置好以后就能夠全屏顯示了坡疼。
最后彬呻,二維碼掃描這個(gè)功能很實(shí)用,而且網(wǎng)上關(guān)于這些的代碼也很多柄瑰,功能實(shí)現(xiàn)也很簡(jiǎn)單(畢竟用的是現(xiàn)成的第三方嘛)闸氮,如果只是用到掃描識(shí)別的話,就用上面的精簡(jiǎn)版的zxing就可以滿足需求了教沾。但是有一點(diǎn)蒲跨,這個(gè)精簡(jiǎn)版的已經(jīng)好久沒有更新代碼了,如果覺得它的識(shí)別速度或者在識(shí)別圖案的時(shí)候難度有點(diǎn)高了详囤,可以自己多看看zxing 的源碼(源碼是一直有人更新和維護(hù)的)财骨,然后自己從中去抽取相應(yīng)的功能代碼镐作,這也是提高自己能力的一種方式藏姐。謝謝!