亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

識(shí)別圖書(shū)ISBN號(hào)并輸出查詢結(jié)果的示例

系統(tǒng) 2510 0

識(shí)別圖書(shū)ISBN號(hào)并輸出查詢結(jié)果的示例 - archfree的專欄 - 博客頻道 - CSDN.NET

識(shí)別圖書(shū)ISBN號(hào)并輸出查詢結(jié)果的示例

分類: java 二維碼識(shí)讀 1247人閱讀 評(píng)論 (0) 收藏 舉報(bào)

識(shí)別圖書(shū)ISBN號(hào)并輸出查詢結(jié)果的示例

寫了個(gè)技術(shù)原型,通過(guò)手機(jī)識(shí)別圖書(shū)的ISBN條形碼,然后通過(guò)豆瓣網(wǎng)的API,輸出ISBN號(hào)對(duì)應(yīng)的圖書(shū)信息。

image

示例很簡(jiǎn)單,上來(lái)是個(gè)按鈕,點(diǎn)擊后,進(jìn)入zxing的activity,用于掃描圖書(shū)ISBN號(hào)。

image

使用zxing的掃描功能,這次還出現(xiàn)了點(diǎn)兒?jiǎn)栴}。我的nexus one攝像頭比較臟了,造成對(duì)焦后無(wú)法識(shí)別,或者識(shí)別的很慢。嚇了我一跳,因?yàn)橐郧皼](méi)有問(wèn)題的。

更換了幾個(gè)版本zxing,問(wèn)題依舊,擦拭了鏡頭,問(wèn)題立刻得到了解決。

nexus one的像素和自動(dòng)對(duì)焦能力,也可能包括cpu的處理因素,稍稍對(duì)中條碼,立刻得到結(jié)果。之前的G1就要慢一些。

這也帶來(lái)了捕獲上面截圖的困難,因?yàn)橐凰查g掃描就結(jié)束了。怎么辦呢?我用手在鏡頭上揉搓了幾下,就可以了,哈哈。

image

提示找到圖書(shū)后,通過(guò)豆瓣API,獲取到圖書(shū)的XML,這里要說(shuō),豆瓣的圖書(shū)信息還是比較全的,我用國(guó)外圖書(shū)也找到了信息。

image

因?yàn)槭褂寐?lián)通WCDMA卡,整個(gè)過(guò)程很快。

下面說(shuō)說(shuō)代碼中的一些要點(diǎn)。

如何掃描條形碼

現(xiàn)在做條形碼掃描,java一般用zxing。zxing有多種復(fù)用方式,最簡(jiǎn)單的方式是,安裝zxing軟件,通過(guò)google market。在自己的應(yīng)用中,通過(guò)Intent調(diào)用zxing的掃描條碼的Activity,然后將掃描到的結(jié)果返回自己的Activity。

比較復(fù)雜的辦法是,將zxing庫(kù)包含在自己的程序中,這比較適合正式的應(yīng)用。

本文使用的是前者。

示例代碼

示例源代碼見(jiàn):

http://easymorse.googlecode.com/svn/tags/sou.book-0.2

還有一個(gè)更為簡(jiǎn)單的示例,可用于理解調(diào)用zxing和豆瓣API的基本過(guò)程,見(jiàn):

http://easymorse.googlecode.com/svn/tags/sou.book-0.1

實(shí)現(xiàn)activity跳轉(zhuǎn)

在0.2版本中,涉及到3個(gè)activity,首先是搜索圖書(shū)的activity,見(jiàn)最上面的圖。點(diǎn)擊按鈕后,進(jìn)入zxing的activity,從視覺(jué)上看,zxing獲取到ISBN號(hào)后,進(jìn)入了第三個(gè)activity,顯示圖書(shū)的詳細(xì)信息。

其實(shí),從zxing得到ISBN號(hào)以后,還是返回到搜索圖書(shū)的activity,但是該activity馬上發(fā)起新的intent,進(jìn)入新的activity。另外,這里也演示了如果通過(guò)intent共享activity之間的參數(shù)。

以下代碼創(chuàng)建新的activity,并設(shè)置參數(shù):

Intent intent = new Intent();
intent.setClass(this, SearchBookActivity.class);
intent.putExtra("ISBN", data.getExtras().getString("SCAN_RESULT"));
this.startActivity(intent);

以下是從intent中獲取到參數(shù):

          this.getIntent().getExtras().getString("ISBN");
        
        有關(guān)zxing的使用,可以參考我另外一個(gè)示例,
        
          android掃描商品條形碼
        
        。
      
webview使用本地頁(yè)面的考慮

在顯示圖書(shū)查詢結(jié)果的activity中,使用webview,這樣顯示可以做的比較靈活和簡(jiǎn)單。

顯示頁(yè)面有多種做法,比如可以是遠(yuǎn)程服務(wù)器上的頁(yè)面,這要求有服務(wù)器端的支持??雌饋?lái)這樣比較省心,尤其是比如有iphone,有android等等異構(gòu)終端的情況下。手機(jī)開(kāi)發(fā)人員可以將這部分都空出來(lái),交給服務(wù)器端去解決。而且是統(tǒng)一的解決方案。

但是,實(shí)踐中,有兩個(gè)問(wèn)題:

  • 服務(wù)器端開(kāi)發(fā)人員要為不同手機(jī)客戶端實(shí)現(xiàn)不同的樣式,而且服務(wù)器端開(kāi)發(fā)者往往并不配備手機(jī)設(shè)備,這也確實(shí)是難以做到的,難道要為一個(gè)做適配的服務(wù)器端開(kāi)發(fā)人員配備iphone、android和s60手機(jī)么?
  • 手機(jī)終端開(kāi)發(fā)者無(wú)法靈活的控制webview中的細(xì)節(jié),webview(這里指android環(huán)境,iphone環(huán)境類似的)支持通過(guò)javascript訪問(wèn)手機(jī)的服務(wù)或者對(duì)象,但這是平臺(tái)相關(guān)的,android有自己的代碼,iphone也有自己的代碼,很難在服務(wù)器端統(tǒng)一解決。

我在這個(gè)原型中試圖解決,即,HTML頁(yè)面在手機(jī)端本地,手機(jī)端和服務(wù)器交互,只是取得數(shù)據(jù),而不包含顯示樣式(也就是HTML頁(yè)面的內(nèi)容),手機(jī)端通過(guò)javascript,將取得的數(shù)據(jù)注入到本地頁(yè)面中顯示。

這種方式的好處是:

  • 手機(jī)端和服務(wù)器端交互是獲取數(shù)據(jù),這是各種手機(jī)系統(tǒng)都通用的;
  • 這種方式類似與AJAX,對(duì)數(shù)據(jù)流量的要求也會(huì)下降;
  • 手機(jī)端開(kāi)發(fā)人員可以靈活的決定頁(yè)面的樣式和交互動(dòng)作。

在本例中,將html和css放置在項(xiàng)目的assets目錄下,另外,該目錄下,還有一張圖片,用于未加載到圖書(shū)圖片時(shí)占位。想像一下,如果不使用webview,這個(gè)需求需要編程處理,是比較繁瑣的,可參見(jiàn) android異步加載ListView中的圖片 中的處理。

實(shí)現(xiàn)webview的代碼很簡(jiǎn)單,這是一個(gè)更簡(jiǎn)單的示例,見(jiàn) android編寫簡(jiǎn)單的Webview 。本例相關(guān)代碼:

this.resultWeb = (WebView) this.findViewById(R.id.resultWeb);
this.resultWeb.getSettings().setSupportZoom(false);

this.resultWeb.getSettings().setJavaScriptCanOpenWindowsAutomatically(

??????? true);

this.resultWeb.getSettings().setJavaScriptEnabled(true);

this.resultWeb.loadUrl( file:///android_asset/results.html );

這里要注意,setJavaScriptEnabled啟用javascript,否則javascript無(wú)效。

android java與html頁(yè)面中javascript互操作

javascript和java之間的通信問(wèn)題,本例只通過(guò)javascript調(diào)用java,還是比較簡(jiǎn)單的。如果是java調(diào)用javascript,應(yīng)該需要啟動(dòng)單獨(dú)的線程來(lái)實(shí)現(xiàn)。

需要為webview對(duì)象創(chuàng)建一個(gè)javascript調(diào)用的接口對(duì)象:

this.resultWeb.addJavascriptInterface(new Object() {
??? public String getBookName() {

??????? return bookInfo.getName();

??? }

??? public String getBookSummary() {
??????? return bookInfo.getSummary();

??? }

??? public String getBookImageUrl() {
??????? return bookInfo.getImageUrl();

??? }

??? public String getBookAuthor() {
??????? return bookInfo.getAuthor();

??? }

}, "searchResult");

其中第一個(gè)參數(shù)是javascript調(diào)用的對(duì)象,第二個(gè)參數(shù),是調(diào)用對(duì)象的名稱。

看看javascript中怎樣調(diào)用這個(gè)對(duì)象:

          document.getElementById("bookName").innerHTML=window.searchResult.getBookName();
        

可以看到window對(duì)象多了個(gè)searchResult對(duì)象屬性,這個(gè)searchResult就是上面方法中第二個(gè)參數(shù)。通過(guò)該名字,就調(diào)用到了上面第一個(gè)參數(shù)創(chuàng)建的內(nèi)部類對(duì)象。

使用豆瓣API

豆瓣API官方網(wǎng)址:

http://www.douban.com/service/apidoc/

這里僅用到根據(jù)ISBN得到圖書(shū)信息xml的功能。在這里:

http://www.douban.com/service/apidoc/reference/subject#獲取書(shū)籍信息

如果匿名使用這個(gè)API,有一定的限制:

API調(diào)用被限制為每分鐘請(qǐng)求不超過(guò)10次。

這里的調(diào)用次數(shù)是每ip地址的。對(duì)于手機(jī)應(yīng)用來(lái)說(shuō),大于6秒鐘掃描一次圖書(shū),應(yīng)該是夠用了。

解析豆瓣XML查詢結(jié)果

對(duì)豆瓣的xml查詢結(jié)果,使用了android自帶的xmlpull api進(jìn)行解析。

這里和 android通過(guò)xmlpull解析xml 稍有差別在于,后者是獲取xml的屬性值,這里是獲取節(jié)點(diǎn)中的文本內(nèi)容。

需要:

if (i == XmlPullParser.START_TAG
??????? && parser.getName().equals("attribute")

??????? && parser.getAttributeValue(0).equals("title")) {

??? bookInfo.setName(parser.nextText());

??? Log.v("soubook", "title>>" + bookInfo.getName());

??? continue;

}

通過(guò)parser.nextText()方法獲取。另外,要注意在獲取完畢后,continue結(jié)束本次循環(huán)。

HTML與CSS

本例中顯示查詢結(jié)果的webview使用了比較難看的灰色背景,主要是為了演示外部css可以很好的和html結(jié)合使用。

同理,也應(yīng)該可以在html頁(yè)面中引用外部的javascript,打算在下一個(gè)版本中加入jquery。

識(shí)別圖書(shū)ISBN號(hào)并輸出查詢結(jié)果的示例


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久久色播| 国产情侣普通话刺激对白 | a毛片免费在线观看 | 国产午夜精品福利视频 | 日日夜夜噜噜 | 国产精品免费播放 | 国产精品h | 免看一级a一片成人123 | 国产专区在线 | 久久香蕉国产 | 99国产超薄丝袜足j在线观看 | 日韩日日操 | 色综合久久久久久 | 色综合天天综合网站中国 | 99视频九九精品视频在线观看 | 亚洲一区二区三区在线网站 | 日本免费一区二区久久人人澡 | 国产福利午夜自产拍视频在线 | 亚洲精品tv久久久久 | 日本一级毛片不卡免费 | 黄色网址视频在线播放 | 在线亚洲欧美性天天影院 | 婷婷开心中文字幕 | 天天干夜夜想 | 中文字幕视频一区 | 毛茸茸成熟女性老太的女bbww | 国产一级影片 | 欧美成人一区二区三区在线电影 | 九九精品视频在线观看九九 | 成人午夜影视全部免费看 | 天天草天天爽 | 手机看片国产欧美日韩高清 | 久热视线观看免费视频 | 欧美日本一本线在线观看 | 自拍 欧美 在线 综合 另类 | 免费一级a毛片在线播放视 免费一级成人毛片 | 久草免费色站 | 天天综合色网 | 九九热最新网址 | 欧美在线激情视频 | 国产一区二区在线视频 |