這將是一個(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)有了非常多可用的依賴庫(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劫映,開源地址:https://github.com/peekler/GDG
demo App中給出的每個(gè)API的使用都是在不同的Activity中违孝,從App首頁可以進(jìn)入到不同的API demoActivity。
拼寫檢查
Android從level 14開始有一個(gè)檢查拼寫的API泳赋,可以通過 TextServicesManager使用雌桑,從level16開始已經(jīng)可以甚至可以檢查一個(gè)完整的句子了。
使用方法非常簡(jiǎn)單祖今,通過 TextServicesManager可以創(chuàng)建SpellCheckerSession:
可以通過實(shí)現(xiàn)SpellCheckerSessionListener接口得到檢查結(jié)果:
SentenceSuggestionsInfo數(shù)據(jù)中保存了正確的文字校坑、偏移量以及所有相關(guān)的信息。
demo地址SpellCheckerActivity
文字識(shí)別
這是Google Play Services Vision API中提供的功能千诬,可以通過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)聽結(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");
然后通過addSplit(...) 方法創(chuàng)建一個(gè) log entry:
timings.addSplit("Phase 1 ready");
當(dāng)使用dumpToLog()后,log信息就會(huì)打印出來:
timings.dumpToLog();
注意要使用TimingLogger, 要設(shè)置adb命令是Tag可用:
setprop log.tag.TAG_MYJOB VERBOSE
demo地址:TimingLoggerActivity.
截屏
在某些情況下查乒,截屏非常有用弥喉。也有一些第三方庫如 Falcon實(shí)現(xiàn)這個(gè)功能,從level 21開始 MediaProjection可以實(shí)時(shí)獲取屏幕內(nèi)容和系統(tǒng)聲音信息流侣颂。
qi档桃,有時(shí)使用標(biāo)準(zhǔn)的Android API通過getWindwo()
非常簡(jiǎn)單地把屏幕內(nèi)容保存為Bitmap
:
demo地址:ScreenCaptureActivity.
PDF創(chuàng)建
從level 19開始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