這將是一個(gè)關(guān)于Android Api的系列文章,AntSoft的Android 團(tuán)隊(duì)一直緊隨技術(shù)前沿,在Budapest University of Technology and Economics培訓(xùn)Android技術(shù)已經(jīng)有8年多的時(shí)間。公司里有個(gè)傳統(tǒng)就是每周進(jìn)行技術(shù)分享,這里將介紹一些Android平臺(tái)上有意思的API。
當(dāng)前Android已經(jīng)有了非常多可用的依賴庫(kù)(Library),但其實(shí)Android platform的一些API有些鮮為人知,但非常有用的方法和類,去研究一下這些API是非常有意思的。
我們知道Android API依賴的Java SE API也非常龐大,根據(jù)統(tǒng)計(jì),Java SE 8有217個(gè)package,4240個(gè)方法,而java SE 7有209個(gè)package,4024個(gè)方法。

在這個(gè)系列文章中,我們將從不同角度展示一些鮮為人知的Android API,并使用這些API寫了demo,開(kāi)源地址:https://github.com/peekler/GDG
demo App中給出的每個(gè)API的使用都是在不同的Activity中,從App首頁(yè)可以進(jìn)入到不同的API demoActivity。

拼寫檢查
Android從level 14開(kāi)始有一個(gè)檢查拼寫的API,可以通過(guò) TextServicesManager使用,從level16開(kāi)始已經(jīng)可以甚至可以檢查一個(gè)完整的句子了。
使用方法非常簡(jiǎn)單,通過(guò) TextServicesManager可以創(chuàng)建SpellCheckerSession:
可以通過(guò)實(shí)現(xiàn)SpellCheckerSessionListener接口得到檢查結(jié)果:
SentenceSuggestionsInfo數(shù)據(jù)中保存了正確的文字、偏移量以及所有相關(guān)的信息。
demo地址SpellCheckerActivity
文字識(shí)別
這是Google Play Services Vision API中提供的功能,可以通過(guò)gradle dependency非常簡(jiǎn)單的引入到project中,需要注意的是不要引入整個(gè)Play Services,因?yàn)?em>Play Services非常大,而我們需要的只是其中的一小部分,https://developers.google.com/android/guides/setup中可以找到相關(guān)的幫助。
Vision API中包含的服務(wù)有:
人臉識(shí)別
條形碼掃描
文字識(shí)別
使用 Text Recognizer API非常簡(jiǎn)單:
首先,在build.gradle中引入依賴:
compile 'com.google.android.gms:play-services-vision:10.0.1'
然后創(chuàng)建TextRecognizer對(duì)象:
TextRecognizer textRecognizer = new TextRecognizer.Builder(context).build();
之后實(shí)現(xiàn) Detector.Processor 接口接口監(jiān)聽(tīng)結(jié)果,得到的結(jié)果是TextBlock 數(shù)組。

合理地使用 TextRecognizer,一般要自定義包含SurfaceView的View用于在屏幕顯示結(jié)果。demo地址 OCRActivity , ocr 中有一些幫助類。
TimingLogger
TimingLogger可以很容易地計(jì)算兩個(gè)log信息之間的時(shí)間差,如下所示:
D/TAG_MYJOB: MyJob: beginD/TAG_MYJOB: MyJob: 2002 ms, Phase 1 readyD/TAG_MYJOB: MyJob: 2002 ms, Phase 2 readyD/TAG_MYJOB: MyJob: 2001 ms, Phase 3 readyD/TAG_MYJOB: MyJob: end, 6005 ms
使用TimingLogger:
TimingLogger timings = new TimingLogger("TAG_MYJOB", "MyJob");
然后通過(guò)addSplit(...) 方法創(chuàng)建一個(gè) log entry:
timings.addSplit("Phase 1 ready");
當(dāng)使用dumpToLog()后,log信息就會(huì)打印出來(lái):
timings.dumpToLog();
注意要使用TimingLogger, 要設(shè)置adb命令是Tag可用:
setprop log.tag.TAG_MYJOB VERBOSE
demo地址:TimingLoggerActivity.
截屏
在某些情況下,截屏非常有用。也有一些第三方庫(kù)如 Falcon實(shí)現(xiàn)這個(gè)功能,從level 21開(kāi)始 MediaProjection可以實(shí)時(shí)獲取屏幕內(nèi)容和系統(tǒng)聲音信息流。
qi,有時(shí)使用標(biāo)準(zhǔn)的Android API通過(guò)getWindwo()
非常簡(jiǎn)單地把屏幕內(nèi)容保存為Bitmap
:
demo地址:ScreenCaptureActivity.
PDF創(chuàng)建
從level 19開(kāi)始Android支持本地內(nèi)容生成PDF文件。
首先創(chuàng)建一個(gè)PageInfonew PdfDocument.PageInfo.Builder(w,h,pageNum).create() ;
,然后使用PDFDocument中的startPage([pageInfo])
就可以創(chuàng)建一個(gè)PDF文件了。
以下的代碼創(chuàng)建了一個(gè)demo.pdf文件:

感謝閱讀。
此篇是譯文,原文地址 Discovering the Android API - Part 1