原文出自:方杰| http://fangjie.sinaapp.com/?p=88 ? 轉載請注明出處
github: https://github.com/JayFang1993/BookScaning
首先能夠看看效果展示: http://fangjie.sinaapp.com/?page_id=54
?
MainActivity.java是主界面的Activity ;BookView.java是顯示圖書基本信息的界面;CaptureActivity.java是掃描鏡頭界面;ReviewActivity是筆記的列表界面;ReviewContent.java是筆記的具體界面;BookInfo是book的實體類(在原來的基礎上添加非常多信息);Review是筆記的實體類。
基本的技術就是Zxing開源庫的使用,簡單的網絡通信,數據解析及UI更新的要點。原來的Demo是直接調用Zxing的apk來使用的,這樣就必需要求用戶必須安裝Zxing的apk,這種應用肯定不行,所以我就把Zxing的一些包整到自己的項目中。
一.Zxing的使用:
首先將Zxing的核心包倒到自己的程序中, 在把Zxing官方的android demo包中去掉不用的,精簡之后如我上面的project文件一樣。這幾個包大致做的是有關Camera和解析的工作,我們僅僅需略微修改CaptureActivity.java和CaptureActivityHandler.java文件。CaptureActivity.java是一個Activity的子類,就是掃描開啟攝像頭的界面。事實上真正對掃描界面處理的程序在CaptureActivityHandler.java中。我們須要的是在掃描得到ISBN值之后將其返回到MainActivity中。
MainActivity.java
//開啟掃描button btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,CaptureActivity.class); startActivityForResult(intent,100); } });
CaptureActivityHandler.java
public void handleMessage(Message message) { switch (message.what) { case R.id.auto_focus: if (state == State.PREVIEW) { CameraManager.get().requestAutoFocus(this, R.id.auto_focus); } break; case R.id.restart_preview: Log.i("OUTPUT", "Got restart preview message"); restartPreviewAndDecode(); break; case R.id.decode_succeeded://掃描成功 Log.i("OUTPUT", "Got decode succeeded message"); state = State.SUCCESS; Bundle bundle = message.getData(); Bitmap barcode = bundle == null ? null : (Bitmap) bundle.getParcelable(DecodeThread.BARCODE_BITMAP); String str_result=((Result) message.obj).getText(); activity.handleDecode((Result) message.obj, barcode); Intent intent=new Intent(activity,MainActivity.class); intent.putExtra("result", str_result); activity.setResult(100,intent); activity.finish(); break; case R.id.decode_failed://掃描失敗 Log.i("OUTPUT", "Got return scan result message"); state = State.PREVIEW; CameraManager.get().requestPreviewFrame(decodeThread.getHandler(), R.id.decode); break; case R.id.return_scan_result://退出掃描 Log.i("OUTPUT", "Got return scan result message"); Intent intent2=new Intent(activity,MainActivity.class); activity.startActivity(intent2); break; } }
MainActivity.java
//獲取掃描之后的ISBN碼,并在豆瓣上搜索圖書信息 protected void onActivityResult(int requestCode,int resultCode,Intent data) { super.onActivityResult(requestCode, resultCode, data); if(((requestCode==100)||(resultCode==Activity.RESULT_OK))&&data!=null) { Log.i("OUTPUT","NGYUFU"); progressDialog=new ProgressDialog(this); progressDialog.setMessage("請稍候,正在讀取信息..."); progressDialog.show(); String urlstr="https://api.douban.com/v2/book/isbn/"+data.getExtras().getString("result"); //掃到ISBN后,啟動下載線程下載圖書信息 new DownloadThread(urlstr).start(); } }
返回ISBN值之后,剩下的就是去豆瓣API上獲取數據,然后解析,更新到UI上了。這些東西在之間的那篇博客已經講過了,不一樣的就是添加了Book的屬性,添加了一個筆記顯示列表和筆記詳細內容的界面,這些東西會了網絡通信和數據解析就非常easy了,不多講了。
二:豆瓣圖書API:
http://developers.douban.com/wiki/?title=book_v2
我用的是以下的兩個,詳細的數據屬性自己去看API文檔。這里由于豆瓣書評的數據必需要授權之后才干獲取完整數據,沒有授權的用戶僅僅能獲取概要信息,為了簡單,我就沒有做OAuth認證部分,直接選擇了筆記信息,這個數據不需要授權。
依據isbn獲取圖書信息 ? ? ? ?GET ? ? ? ?/v2/book/isbn/:name
獲取某本圖書的全部筆記 ? ? ? GET ? ? /v2/book/:id/annotations
?
歡迎各位關注我的個人網站:
http://fangjie
.sinaapp.com/
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
