android每一個(gè)系統(tǒng)版本都對(duì)應(yīng)一個(gè)編號(hào)的,21代表安卓5.0系統(tǒng),23代表安卓6.0系統(tǒng)。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請(qǐng)、虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、鎮(zhèn)雄網(wǎng)站維護(hù)、網(wǎng)站推廣。
API等級(jí)15:Android 4.0.3 - 4.0.4 Ice Cream Sandwich
API等級(jí)16:Android 4.1 Jelly Bean
API等級(jí)17:Android 4.2 Jelly Bean
API等級(jí)18:Android 4.3 Jelly Bean
API等級(jí)19:Android 4.4 KitKat
API等級(jí)20:Android 4.4W
API等級(jí)21:Android 5.0 Lollipop
API等級(jí)22:Android 5.1 Lollipop
API等級(jí)23:Android 6.0 Marshmallow
擴(kuò)展資料:
從2009年5月開(kāi)始,Android操作系統(tǒng)改用甜點(diǎn)來(lái)作為版本代號(hào),這些版本按照從C大寫字母開(kāi)始的順序來(lái)進(jìn)行命名:紙杯蛋糕(Cupcake)、甜甜圈(Donut)、閃電泡芙(éclair)、凍酸奶(Froyo)、姜餅(Gingerbread)。
蜂巢(Honeycomb)﹑冰淇淋三明治(Ice Cream Sandwich)、果凍豆(Jelly Bean)、奇巧(KitKat)、棒棒糖(Lollipop)、棉花糖(Marshmallow)、牛軋?zhí)牵∟ougat)、奧利奧(Oreo )、餡餅(Pie)。
參考資料來(lái)源:百度百科-安卓歷史版本
android-21應(yīng)該是指android的API版本碼是 21吧
API版本碼 21對(duì)應(yīng)版本號(hào) 5.0.1
一切源于在項(xiàng)目過(guò)程中的一個(gè)Bug:我的需求是在MainActivity 實(shí)現(xiàn)自動(dòng)預(yù)覽,也可以點(diǎn)擊跳到簽到SignedActivity去實(shí)現(xiàn)拍照簽到,第一次進(jìn)入界面的時(shí)候都是正常的,但是有時(shí)候返回來(lái)的時(shí)候預(yù)覽失敗,即從MainActivity跳轉(zhuǎn)到SignedActivity偶爾預(yù)覽失敗和從SignedActivity返回MainActivity偶爾失敗,都是報(bào)(CAMERA_IN_USE)ERRO=1的錯(cuò)誤,奇怪的是的的確確做了完全釋放操作,加上以前用的更多的是Camera api 對(duì)于Camer2 的機(jī)制沒(méi)有完整去研究過(guò),一下子懵了,于是乎先去找了Stack Overflow,查到一個(gè)解決方案是:"我棄用了新API,換回舊API",ORZ,找了其他的也沒(méi)有答案,可是我不服呀,我就把官方的文檔全部啃了一遍,于是乎便有了以下的理解,我想如果你不懂得怎么使用Camera2的話,這篇絕對(duì)值得你去閱讀,你會(huì)發(fā)現(xiàn)Camera2 并非像大多數(shù)說(shuō)得那樣使用起來(lái)很復(fù)雜。
全新的android.hardware.Camera2 。Android 5.0對(duì)拍照API進(jìn)行了全新的設(shè)計(jì),新增了全新設(shè)計(jì)的Camera 2 API,這些API不僅大幅提高了Android系統(tǒng)拍照的功能,還能支持RAW照片輸出,甚至允許程序調(diào)整相機(jī)的對(duì)焦模式、曝光模式、快門等。
在Camera2 架構(gòu)在核心參與類角色有: CameraManager 、 CameraDevice 、 CameraCharacteristics 、 CameraRequest與CameraRequest.Builder 、 CameraCaptureSession 以及 CaptureResult 。
位于android.hardware.camera2.CameraManager下,也是Android 21(5.0)添加的,和其他系統(tǒng)服務(wù)一樣通過(guò) Context.getSystemService(CameraManager.class ) 或者 Context.getSystemService(Context.CAMERA_SERVICE) 來(lái)完成初始化,主要用于管理系統(tǒng)攝像頭:
CameraDevice是Camera2中抽象出來(lái)的一個(gè)對(duì)象,直接與系統(tǒng)硬件攝像頭相聯(lián)系。因?yàn)椴豢赡芩械臄z像頭都會(huì)支持高級(jí)功能(即攝像頭功能可被分為limit 和full 兩個(gè)級(jí)別),當(dāng)攝像頭處于limited 級(jí)別時(shí)候,此時(shí)Camera2和早期的Camera功能差不多,除此之外在Camera2架構(gòu)中,CameraDevice還承擔(dān)其他兩項(xiàng)重要任務(wù):
正如前面所說(shuō), 系統(tǒng)向攝像頭發(fā)送 Capture 請(qǐng)求,而攝像頭會(huì)返回 CameraMetadata,這一切都是在由對(duì)應(yīng)的CameraDevice創(chuàng)建的CameraCaptureSession 會(huì)話完成 ,當(dāng)程序需要預(yù)覽、拍照、再次預(yù)覽時(shí),都需要先通過(guò)會(huì)話。(A configured capture session for a CameraDevice , used for capturing images from the camera or reprocessing images captured from the camera in the same session previously.A CameraCaptureSession is created by providing a set of target output surfaces to createCaptureSession , or by providing an InputConfiguration and a set of target output surfaces to createReprocessableCaptureSession for a reprocessable capture session . Once created, the session is active until a new session is created by the camera device, or the camera device is closed.)CameraCaptureSession一旦被創(chuàng)建,直到對(duì)應(yīng)的CameraDevice關(guān)閉才會(huì)死掉。雖然CameraCaptureSession會(huì)話用于從攝像頭中捕獲圖像,但是只有同一個(gè)會(huì)話才能再次從同一攝像頭中捕獲圖像。另外, 創(chuàng)建會(huì)話是一項(xiàng)耗時(shí)的異步操作,可能需要幾百毫秒 ,因?yàn)樗枰渲孟鄼C(jī)設(shè)備的內(nèi)部管道并分配內(nèi)存緩沖區(qū)以將圖像發(fā)送到所需的目標(biāo),因而createCaptureSession和createReprocessableCaptureSession會(huì)將隨時(shí)可用的CameraCaptureSession發(fā)送到提供的監(jiān)聽(tīng)器的onConfigured回調(diào)中。如果 無(wú)法完成配置,則觸發(fā)onConfigureFailed回調(diào) ,并且會(huì)話將不會(huì)變?yōu)榛顒?dòng)狀態(tài)。最后需要注意的是,如果 攝像頭設(shè)備創(chuàng)建了一個(gè)新的會(huì)話,那么上一個(gè)會(huì)話是被關(guān)閉的,并且會(huì)回調(diào)與其關(guān)聯(lián)的onClosed ,如果不處理好,當(dāng)會(huì)話關(guān)閉之后再次調(diào)用會(huì)話的對(duì)應(yīng)方法那么所有方法將會(huì)跑出IllegalStateException異常。關(guān)閉的會(huì)話清除任何重復(fù)的請(qǐng)求(和調(diào)用了stopRepeating()方法類似),但是在新創(chuàng)建的會(huì)話接管并重新配置攝像機(jī)設(shè)備之前,關(guān)閉的會(huì)話仍然會(huì)正常完成所有正在進(jìn)行的捕獲請(qǐng)求。簡(jiǎn)而言之,在Camera2中CameraCaptureSession承擔(dān)很重要的角色:
描述Cameradevice屬性的對(duì)象,可以使用CameraManager通過(guò)getCameraCharacteristics(String cameraId)進(jìn)行查詢。
CameraRequest代表了一次捕獲請(qǐng)求, 而CameraRequest.Builder用于描述捕獲圖片的各種參數(shù)設(shè)置,包含捕獲硬件(傳感器,鏡頭,閃存),對(duì)焦模式、曝光模式,處理流水線,控制算法和輸出緩沖區(qū)的配置。 ,然后傳遞到對(duì)應(yīng)的會(huì)話中進(jìn)行設(shè)置, CameraRequest.Builder則負(fù)責(zé)生成CameraRequest對(duì)象 。當(dāng)程序調(diào)用setRepeatingRequest()方法進(jìn)行預(yù)覽時(shí),或調(diào)用capture()方法進(jìn)行拍照時(shí),都需要傳入CameraRequest參數(shù)。CameraRequest可以通過(guò)CameraRequest.Builder來(lái)進(jìn)行初始化,通過(guò)調(diào)用createCaptureRequest來(lái)獲得。
CaptureRequest描述是從圖像傳感器捕獲單個(gè)圖像的結(jié)果的子集的對(duì)象。(CaptureResults are produced by a CameraDevice after processing a CaptureRequest)當(dāng)CaptureRequest被處理之后由CameraDevice生成。
CameraManager 處于頂層管理位置負(fù)責(zé) 檢測(cè)獲取所有攝像頭及其特性 和 傳入指定的CameraDevice.StateCallback回調(diào)打開(kāi)指定攝像頭 , CameraDevice 是負(fù)責(zé)管理抽象對(duì)象,包括 監(jiān)聽(tīng)Camera 的狀態(tài)回調(diào)CameraDevice.StateCallback 、 創(chuàng)建CameraCaptureSession和CameraRequest , CameraCaptureSession 用于描述一次圖像捕獲操作,主要負(fù)責(zé) 監(jiān)聽(tīng)自己會(huì)話的狀態(tài)回調(diào)CameraCaptureSession.StateCallback 和 CameraCaptureSession.CaptureCallback捕獲回調(diào) ,還有 發(fā)送處理CameraRequest ; CameraRequest 則可以看成是一個(gè)"JavaBean"的作用用于描述希望什么樣的配置來(lái)處理這次請(qǐng)求;最后三個(gè)回調(diào)用于監(jiān)聽(tīng)對(duì)應(yīng)的狀態(tài)。
CameraManager 處于頂層管理位置負(fù)責(zé)檢測(cè) 檢測(cè)獲取所有攝像頭并設(shè)置輸出參數(shù),傳入指定的CameraDevice.StateCallback回調(diào),然后打開(kāi)指定攝像頭,并觸發(fā)CameraDevice.StateCallback中的onOpened方法,并在onOpened方法里開(kāi)始通過(guò)調(diào)用創(chuàng)建預(yù)覽會(huì)話, ,CameraDevice負(fù)責(zé)創(chuàng)建請(qǐng)求 CameraCharacteristics 、 CameraRequest與CameraRequest.Builder 、 CameraCaptureSession 以及 CaptureResult 則可以看成是一個(gè)JavaBean的作用用于描述以什么樣的配置來(lái)處理這次請(qǐng)求。
Camera2Helper類只是簡(jiǎn)單的封裝了下,為了讓Camera2的初始化和Activity 高度分離,這個(gè)類只是Demo 階段部分有待優(yōu)化,另外結(jié)合我具體的業(yè)務(wù),對(duì)于圖片大小有限制,所以我都是默認(rèn)采用采樣壓縮率方式對(duì)圖片進(jìn)行壓縮