Android4.0新特性 中文翻译
?
轉(zhuǎn)自http://www.eoeandroid.com/thread-103300-1-1.html
android4.0 SDK發(fā)布有一段時(shí)間了,在eoe上找到了翻譯過的新特性說明,特轉(zhuǎn)載
Android 4.0 平臺
API等級:14
Android 4.0 是一次重要的平臺發(fā)布版,為用戶和應(yīng)用程序開發(fā)者增加了大量的新特性。在下面我們將討論的所有新特性和API中,因?yàn)樗鼘?Android 3.x 版本中廣泛使用的API和全息圖像主題帶給了小屏幕設(shè)備,因此我們說 Android 4.0 是一次重要的平臺發(fā)布版。作為一名開發(fā)者,現(xiàn)在你擁有了單一的平臺和統(tǒng)一的 API 框架,使你可以開發(fā),并通過一個(gè)APK 來發(fā)布你的應(yīng)用程序,并且可以為運(yùn)行相同版本 Android(Android 4.0[API級別14]或以上版本) 的手機(jī)、平板電腦和其他設(shè)備提供優(yōu)化了的用戶體驗(yàn)。
Social APIs in Contacts Provider
User Profile
最新的android包含了一個(gè)機(jī)主的個(gè)人檔案,在 ContactsContract.Profile表里,通過新建一個(gè)ContactsContract.RawContacts記錄, 社交應(yīng)用程序可以維護(hù)一個(gè)用戶個(gè)人資料數(shù)據(jù)。這個(gè)新的聯(lián)系人數(shù)據(jù)表的定義不同于以往的聯(lián)系人數(shù)據(jù)表的定義,你必須在 CONTENT_RAW_CONTACTS_URI表里新建1個(gè)內(nèi)容。聯(lián)系人資料在這個(gè)表中被加上了"Me"標(biāo)簽,只能單一用戶可見。
增加一個(gè)新的聯(lián)系人資料需要 WRITE_PROFILE權(quán)限,讀取該聯(lián)系人資料表需要READ_PROFILE權(quán)限。大多數(shù)的應(yīng)用程序需要用戶資料,甚至是提供數(shù)據(jù)給該資料。但是讀取用戶資料是一個(gè)敏感的權(quán)限,你應(yīng)該期望用戶對需要讀取用戶資料的應(yīng)用保持懷疑態(tài)度。
Invite Intent
INVITE_CONTACT intent 允許一個(gè)應(yīng)用按照用戶意愿,邀請一個(gè)聯(lián)系人進(jìn)入某個(gè)社會(huì)網(wǎng)絡(luò)的行為。接收程序通過它邀請指定的人加入社會(huì)網(wǎng)絡(luò)。大部分的應(yīng)用將會(huì)在這個(gè)操作的接收端。例如,內(nèi)置的people應(yīng)用程序里,用戶詳細(xì)信息列表上列出了該用戶使用的社交應(yīng)用,用戶可以通過社交應(yīng)用上的"添加聯(lián)接"按鈕調(diào)用 invite intent 連接兩個(gè)人的社會(huì)網(wǎng)絡(luò)。
為了讓你的社交應(yīng)用程序出現(xiàn)在“添加鏈接”按鈕的列表里,你的應(yīng)用必須提供一個(gè)同步適配器來同步你的社交網(wǎng)絡(luò)中的聯(lián)系人信息。你必須通過對你的應(yīng)用程序的同步配置文件增加inviteContactActivity屬性 告知系統(tǒng)你的應(yīng)用回應(yīng) INVITE_CONTACT intent 。activity 必須包含一個(gè)完全合格的限定名系統(tǒng)才會(huì)給其發(fā)送invite intent,相關(guān)activity 才會(huì)檢索意圖響應(yīng)的數(shù)據(jù),邀請相關(guān)的人加入社會(huì)網(wǎng)絡(luò)或者與手機(jī)使用者建立連接。
Large photos
android現(xiàn)在支持高分辨率的聯(lián)系人照片,當(dāng)你將一個(gè)照片放到聯(lián)系人記錄中的時(shí)候,系統(tǒng)會(huì)把它處理成96x96的縮略圖(像之前那樣),和一個(gè)256x256 文件形式的的顯示圖片(該系統(tǒng)選擇的確切尺寸,在未來可能會(huì)有所不同)。你能夠?yàn)槁?lián)系人添加一個(gè)大的照片在PHOTO列,系統(tǒng)會(huì)再加工成相應(yīng)的縮略圖顯示照片記錄。
Contact Usage Feedback
新的? ContactsContract.DataUsageFeedback APIs 允許你追蹤用戶使用特定的方法聯(lián)系其他人的頻度,例如用戶多久使用每個(gè)電話號碼或郵件。此信息有助于改善與每個(gè)人相關(guān)聯(lián)的每個(gè)接觸方法的排名,并提供更好的建議去聯(lián)系每個(gè)人聯(lián)系。
Calendar (日歷) Provider
新的日歷API允許我們讀,增加,編輯和刪除存儲在Calendar Provider的日歷、事件與會(huì)者,提醒和警示, 各種應(yīng)用程序和部件可以使用這些API來讀取和修改日歷事件。然而,一些最引人注目的用例的是同步適配器能夠通過Calendar Provider同步其他日歷服務(wù)的用戶的日歷,能夠一所有的用戶事件提供一個(gè)統(tǒng)一的存放位置。例如,GOOGLE日歷事件,是同步的google日歷同步適配器,允許這些事件在android內(nèi)置的日歷軟件中查看。
Event intent
如果你想要做的是用戶的日歷添加事件,你可以使用"vnd.android.cursor.item/event"類型 的ACTION_INSERT intent 開始在日歷應(yīng)用程序的活動(dòng),創(chuàng)建新的事件。使用的意圖,不需要任何權(quán)限并且您可以指定下列額外的事件的詳細(xì)信息:(事件名,事件開始時(shí)間,結(jié)束時(shí)間,地點(diǎn),描述,等等。)
Voicemail Provider
新的Voicemail Provider允許應(yīng)用程序添加語音信箱設(shè)備,使目前所有用戶的語音郵件在一個(gè)單一的視覺呈現(xiàn)。舉個(gè)例子,很有可能,用戶擁有多個(gè)語音郵件的來源,如從手機(jī)服務(wù)供應(yīng)商和其他VoIP或其他替代的語音服務(wù)之一。這些應(yīng)用可以通過Voicemail Provider APIs添加他們的語音郵箱到該手機(jī)中。內(nèi)置的Phone應(yīng)用會(huì)呈現(xiàn)所有的語音郵箱給用戶一個(gè)統(tǒng)一的展示。雖然Phone應(yīng)用是系統(tǒng)唯一的一個(gè)應(yīng)用能夠讀取所有的語音郵件信箱,但是每個(gè)提供語音郵件服務(wù)的應(yīng)用能夠讀他們加到系統(tǒng)中的郵箱(不能讀其他服務(wù)的)。
由于現(xiàn)在的API不支持第三方應(yīng)用程序去讀系統(tǒng)中所有的語音信箱,他們能夠用的api操作是他們提供給用戶的語音郵箱。
Multimedia(多媒體)
Android4.0增加了幾個(gè)新的API ,使應(yīng)用程序能夠與照片,影片,和音樂等媒體交互。
Media Effects
一個(gè)新的媒體效果框架,讓您適用于各種圖像和視頻的視覺效果。例如,圖像效果框架讓您可以輕松地修復(fù)紅眼,將圖像轉(zhuǎn)換為灰度,亮度調(diào)整,調(diào)整飽和度,旋轉(zhuǎn)圖像,應(yīng)用魚眼鏡頭的效果,等等。該效果框架執(zhí)行在GPU上,以獲得最大的性能。
為了最佳效果,效果框架直接應(yīng)用了OpenGL的紋理,您的應(yīng)用程序必須有一個(gè)有效的OpenGLcontext,才可以使用效果框架的API。應(yīng)用效果的紋理可以用于位圖,視頻,甚至相機(jī)。不過,也有一定的限制,紋理必須滿足:
1、他們必須綁定到一個(gè)GL_TEXTURE_2D的紋理圖像
2、他們必須至少包含一個(gè)mipmap的級別
Remote control client
新RemoteControlClient允許媒體播放器,使媒體播放器能夠被遠(yuǎn)程控制,如設(shè)備鎖定屏幕。媒體播放器還可以使遙控器上的顯示目前正在播放的媒體,如進(jìn)度信息和專輯封面的信息。
Media player
1、加入網(wǎng)絡(luò)權(quán)限就可以使媒體播放器播放網(wǎng)絡(luò)上的音樂。必須不要忘記加上權(quán)限。
2、允許你定義播放習(xí)慣。
Media types
本次的4.0增加了支持的媒體種類:
1、HTTP / HTTPS的實(shí)時(shí)流媒體協(xié)議第3版
2、ADTS的原料AAC音頻編碼
3、WEBP圖像
4、Matroska的視頻
Camera類
Camera類包括用于(人臉檢測和控制焦距和感光區(qū))的API 。
face detection 人臉檢測
相機(jī)的應(yīng)用程序現(xiàn)在可以提高自己的能力啦。作為一門人臉識別的學(xué)科,不僅檢測人臉特征,而且還檢測眼睛和嘴巴。如果你想要使用你的相機(jī)來做人臉識別的程序,你必須使用setFaceDetectionListener方法來注冊 Camera.FaceDetectionListener對象。然后,您可以啟動(dòng)您的camera surface ,并調(diào)用startFaceDetection方法開始檢測人臉。
如果你實(shí)現(xiàn)了 Camera.FaceDetectionListener接口,當(dāng)系統(tǒng)檢測到一個(gè)或者更多個(gè)人臉時(shí),便會(huì)向所調(diào)用的接口回調(diào)onFaceDetection方法,包括一組Camera.Face 對象。
Camera.Face類的實(shí)例提供有關(guān)于人臉識別的各種各樣信息,其中包括:
1、一個(gè)相對與相機(jī)當(dāng)前視野的所指定人臉邊界的矩形框( Rect 對象)。
2、一個(gè)1到100之間并用于人臉識別精確度的整數(shù)。
每個(gè)所檢測到的人臉,會(huì)分配獨(dú)一無二的ID。
當(dāng)識別到眼睛和嘴巴時(shí),都會(huì)生成一個(gè) Point 對象。該對象指定眼睛或者嘴巴的空間位置。
注意:并不是所有設(shè)備都支持人臉識別,你應(yīng)該先調(diào)用getMaxNumDetectedFaces() 方法來保證返回的值大于0,說明你的設(shè)備是支持該技術(shù)的。當(dāng)然,還有一些設(shè)備可以支持人臉識別,但是不支持眼睛和嘴巴的鑒定,在這種情況下,Camera.Face 對象為空值。
焦距和感光區(qū)域
照相機(jī)程序現(xiàn)在可以控制焦距和感光的白平衡以及自動(dòng)曝光。 這兩個(gè)功能使用新的Camera.Area類來指定照相所集中和所計(jì)算的出來的當(dāng)前視圖區(qū)域。 Camera.Area類的實(shí)例定義該視圖邊界的矩形區(qū)域和面積比重(相對于其他區(qū)域,該區(qū)域的重要性)。
設(shè)置焦距或感光度之前,應(yīng)首先調(diào)用getMaxNumFocusAreas()或getMaxNumMeteringAreas()方法。如果這些返回零,則該設(shè)備不支持相應(yīng)的功能。
設(shè)置焦距調(diào)用setFocusAreas() 方法;設(shè)置感光度調(diào)用setMeteringAreas()方法;這兩種方法每次會(huì)返回包含所對應(yīng)焦距或者感光度的Camera.Area 對象列表(List)。 例如,你可以實(shí)現(xiàn)一個(gè)功能,允許用戶設(shè)置通過觸摸一個(gè)預(yù)覽區(qū)域,您再轉(zhuǎn)化到重點(diǎn)領(lǐng)域Camera.Area對象和要求,重點(diǎn)放在該區(qū)域的場景,相機(jī)。 在現(xiàn)場的面積變化,在這一領(lǐng)域的重點(diǎn)或曝光將不斷更新。
攝像頭自動(dòng)對焦
現(xiàn)在,您可以啟用連續(xù)自動(dòng)對焦(CAF)拍照。 為了使你的照相程序調(diào)用連續(xù)自動(dòng)對焦功能, 需要傳遞FOCUS_MODE_CONTINUOUS_PICTURE參數(shù)到setFocusMode()方法中 。 當(dāng)準(zhǔn)備拍攝照片,調(diào)用autoFocus()方法。Camera.AutoFocusCallback對象便立即收到一個(gè)回調(diào)來指示是否獲得到了焦點(diǎn)。 接受到回調(diào)值后,如果還需要重新自動(dòng)對焦,則必須調(diào)用cancelAutoFocus()方法。
注意:連續(xù)自動(dòng)對焦功能支持視頻拍攝,使用FOCUS_MODE_CONTINUOUS_VIDEO參數(shù)。可以參考sdk9版本。
攝像頭的其他功能
在錄制視頻時(shí),您可以調(diào)用takePicture()方法保存照片,同時(shí)不中斷視頻的拍攝。 但是,在這樣做之前,你應(yīng)該調(diào)用isVideoSnapshotSupported()方法來以確保硬件是否支持這個(gè)功能。
使用setAutoExposureLock()和setAutoWhiteBalanceLock()方法可以鎖定自動(dòng)曝光和白平衡來防止用戶更改這些屬性。
相機(jī)拍攝運(yùn)行時(shí),可以調(diào)用setDisplayOrientation()方法。 在以前的版本中,你只能在運(yùn)行之前使用,但現(xiàn)在你可以在任何時(shí)候改變方向。
相機(jī)廣播意圖
Camera.ACTION_NEW_PICTURE :這表明用戶已經(jīng)占據(jù)了新的照片。 內(nèi)置的攝像頭應(yīng)用程序調(diào)用此廣播,拍攝照片后,第三方的攝像頭應(yīng)用程序也應(yīng)該拍攝照片后播出的這一意圖。
Camera.ACTION_NEW_VIDEO :這表明用戶已經(jīng)占據(jù)了一個(gè)新的視頻。 內(nèi)置攝像頭的應(yīng)用程序調(diào)用此廣播后的視頻記錄和第三方的攝像頭應(yīng)用程序也應(yīng)該拍攝視頻后播放這一意圖。
Android Beam (NDEF Push with NFC)
Android的光束是一個(gè)新的NFC功能,允許您發(fā)送NDEF的郵件從一臺設(shè)備到另一臺(又稱“NDEF推”的過程)。兩款A(yù)ndroid供電設(shè)備支持Android束接近時(shí),數(shù)據(jù)傳輸啟動(dòng)(約4厘米),通常與他們的背上撫摸。內(nèi)部的NDEF消息要共享設(shè)備之間的數(shù)據(jù)可以包含任何數(shù)據(jù),例如,人民應(yīng)用股的接觸,采用Android的YouTube股份的視頻和瀏覽器股網(wǎng)址梁。
采用Android束的設(shè)備之間傳輸數(shù)據(jù),您需要?jiǎng)?chuàng)建一個(gè)包含您要共享的信息,而您的活動(dòng)是NdefMessage前臺的NdefMessage。 然后,您必須通過NdefMessage到系統(tǒng)中的兩種方法之一:
1、定義一個(gè)單獨(dú)的NdefMessage推,而在活動(dòng):
setNdefPushMessage()在任何時(shí)間設(shè)置您要發(fā)送的消息。 例如,你可以調(diào)用這個(gè)方法,并通過您NdefMessageNdefMessage在您的活動(dòng)onCreate方法。 然后,每當(dāng)Android的光束與另一個(gè)設(shè)備激活活動(dòng),而在前臺,系統(tǒng)的NdefMessage發(fā)送到其他設(shè)備。
2、定義NdefMessage推Android的梁開始的時(shí)間:
實(shí)施NfcAdapter.CreateNdefMessageCallback ,在實(shí)施createNdefMessage方法返回您要發(fā)送的NdefMessage的。 然后通過NfcAdapter.CreateNdefMessageCallback實(shí)施setNdefPushMessageCallback
在這種情況下,Android的光束是與另一個(gè)設(shè)備激活時(shí),你的活動(dòng),而在前臺, createNdefMessage來檢索您要NdefMessage的NdefMessage。 這允許您定義NdefMessage只提供一次Android的光束被啟動(dòng),如果郵件的內(nèi)容可能會(huì)有所不同,整個(gè)活動(dòng)的生活。
如果你想運(yùn)行一些特定的代碼,一旦該系統(tǒng)已成功交付NDEF消息到其他設(shè)備,你可以NfcAdapter.OnNdefPushCompleteCallbackNfcAdapter.OnNdefPushCompleteCallback和setNdefPushCompleteCallback。 系統(tǒng)將調(diào)用onNdefPushComplete()時(shí),郵件將被傳遞。
在接收設(shè)備上,系統(tǒng)調(diào)度NDEF定期NFC標(biāo)簽以類似的方式推入消息。 該系統(tǒng)調(diào)用的意圖ACTION_NDEF_DISCOVERED行動(dòng)啟動(dòng)URL或一個(gè)MIME類型設(shè)置根據(jù)第一的活動(dòng),你想回應(yīng)的活動(dòng),你可以聲明意圖過濾器的網(wǎng)址或你的應(yīng)用程序關(guān)心的MIME類型。 欲了解更多關(guān)于標(biāo)簽的信息,調(diào)度NFC開發(fā)人員指南。
如果你想你NdefMessage NdefMessage攜帶URI,你現(xiàn)在可以用方便的createUri NdefRecord Uri的對象是一個(gè)字符串或一個(gè)基于構(gòu)造一個(gè)新NdefRecord NdefRecord 。 如果URI是一個(gè)特殊的格式,您希望您的應(yīng)用程序也收到一個(gè)Android束事件期間,您應(yīng)該為您的活動(dòng)創(chuàng)造的意圖過濾器使用相同的URI方案,以接收傳入的NDEF消息。
為了保證您的應(yīng)用程序處理傳入的NDEF消息,你也應(yīng)該通過與您的“Android應(yīng)用程序記錄NdefMessage NdefMessage,即使其他應(yīng)用程序過濾器相同的意圖行動(dòng)。您可以創(chuàng)建一個(gè)Android應(yīng)用程序通過createApplicationRecord,通過它您的應(yīng)用程序包的名稱。當(dāng)其他設(shè)備接收的的應(yīng)用程序記錄和多個(gè)應(yīng)用程序,處理的指定意圖的活動(dòng)NDEF消息時(shí),系統(tǒng)提供的消息,在應(yīng)用程序中的活動(dòng)(基礎(chǔ)上的匹配應(yīng)用程序記錄)如果目標(biāo)設(shè)備目前還沒有安裝您的應(yīng)用程序,該系統(tǒng)采用的Andr??oid應(yīng)用程序的記錄,推出Android市場和用戶的應(yīng)用程序以安裝。
如果您的應(yīng)用程序不使用NFC API來執(zhí)行NDEF推消息,則Android提供了一個(gè)默認(rèn)的行為:當(dāng)您的應(yīng)用程序是在一臺設(shè)備在前臺和Android的光束被調(diào)用另一個(gè)Android的供電設(shè)備,其他設(shè)備接收到一個(gè)NDEF一個(gè)Android應(yīng)用程序記錄,確定您的應(yīng)用程序的消息。 如果接收設(shè)備已安裝的應(yīng)用程序,系統(tǒng)啟動(dòng)它,如果它不安裝,Android的市場開放,并把用戶帶到您的應(yīng)用程序,以便安裝它。
你可以有關(guān)Android的梁,在其他NFC功能的NFC基礎(chǔ)開發(fā)指南。 對于一些示例代碼使用Android束,看到的 Android 束演示。
Wi-Fi Direct
現(xiàn)在,Android的支持Wi - Fi的直接點(diǎn)對點(diǎn)點(diǎn)對點(diǎn)(P2P)Android系統(tǒng)的供電設(shè)備和其他類型的設(shè)備,沒有一個(gè)熱點(diǎn)或互聯(lián)網(wǎng)連接之間的連接。 Android框架提供了一套Wi - Fi的P2P的API,允許你去發(fā)現(xiàn)和連接到其他設(shè)備時(shí),每個(gè)設(shè)備的Wi - Fi的直接支持,然后溝通跨越距離遠(yuǎn)遠(yuǎn)長于藍(lán)牙連接迅速??連接。
android.net.wifi.p2p ,一個(gè)新的軟件包,包含所有的API執(zhí)行同行等連接與Wi - Fi。 你需要與主類是WifiP2pManager ,您可以調(diào)用getSystemService(WIFI_P2P_SERVICE)收購。WifiP2pManager包括API,允許您:
1、您P2P連接的應(yīng)用程序通過調(diào)用initialize
2、探索通過調(diào)用附近的設(shè)備discoverPeers
開始通過調(diào)用P2P連接connect以及一些其他的接口和類是必要的,如:
WifiP2pManager.ActionListener接口,讓您能夠接收的操作時(shí),如發(fā)現(xiàn)同行或連接到他們的成功或失敗的回調(diào)。
WifiP2pManager.PeerListListener界面,您可以收到有關(guān)發(fā)現(xiàn)同行的信息。 回調(diào)提供了一個(gè)WifiP2pDeviceList ,您可以從中檢索一個(gè)WifiP2pDevice范圍內(nèi)的每個(gè)設(shè)備對象和獲取信息,如設(shè)備的名稱,地址,設(shè)備類型,設(shè)備支持的WPS配置。
WifiP2pManager.GroupInfoListener界面,您可以收到一個(gè)P2P組信息。 回調(diào)提供了一個(gè)WifiP2pGroup對象,它提供了所有者,網(wǎng)絡(luò)名稱和密碼的信息,如組。
WifiP2pManager.ConnectionInfoListener界面,您可以得到當(dāng)前連接的信息。 回調(diào)提供了一個(gè)WifiP2pInfo對象,它具有信息,如一個(gè)組是否已經(jīng)形成,誰是該組的所有者。
為了使用的Wi - Fi P2P的API,你的應(yīng)用程序必須要求以下用戶權(quán)限:
1、ACCESS_WIFI_STATE
2、CHANGE_WIFI_STATE
3、INTERNET (雖然你的應(yīng)用程序不技術(shù)上連接到互聯(lián)網(wǎng),溝通的Wi - Fi標(biāo)準(zhǔn)的Java套接字直接同行需要Internet權(quán)限)。
Android系統(tǒng)還廣播了幾種不同的行動(dòng),在特定的Wi - Fi P2P事件:
1、WIFI_P2P_CONNECTION_CHANGED_ACTION :P2P連接狀態(tài)發(fā)生了變化。 這與EXTRA_WIFI_P2P_INFOWifiP2pInfo與EXTRA_NETWORK_INFO NetworkInfo對象的對象EXTRA_NETWORK_INFO EXTRA_NETWORK_INFOEXTRA_WIFI_P2P_INFO EXTRA_WIFI_P2P_INFO 。
2、WIFI_P2P_STATE_CHANGED_ACTION :P2P的狀態(tài)已經(jīng)改變之間的啟用和禁用。 它攜帶EXTRA_WIFI_STATE要么WIFI_P2P_STATE_DISABLED或WIFI_P2P_STATE_ENABLED
WIFI_P2P_PEERS_CHANGED_ACTION等設(shè)備的列表已經(jīng)改變。
3、WIFI_P2P_THIS_DEVICE_CHANGED_ACTION :該設(shè)備的細(xì)節(jié)已經(jīng)改變。
見的WifiP2pManager文檔了解更多信息。 也期待在Wi - Fi的直接演示示例應(yīng)用程序。
Bluetooth Health Devices
機(jī)器人現(xiàn)在支持藍(lán)牙的健康概況設(shè)備,使您可以創(chuàng)建使用藍(lán)牙醫(yī)療設(shè)備,如心率監(jiān)視器,血液米,溫度計(jì),和規(guī)模,支持藍(lán)牙通信的應(yīng)用。
定期耳機(jī)支持A2DP設(shè)備,你必須調(diào)用getProfileProxy()BluetoothProfile.ServiceListener和HEALTH的廓型與文件代理對象建立連接。
一旦你獲得健康概況代理( BluetoothHealth對象),成對的醫(yī)療設(shè)備的連接和溝通包括以下新的藍(lán)牙類:
BluetoothHealthCallback :您必須擴(kuò)展這個(gè)類實(shí)現(xiàn)回調(diào)方法接收應(yīng)用程序的注冊狀態(tài)和藍(lán)牙信道狀態(tài)的變化更新。
BluetoothHealthAppConfiguration :在您的回調(diào)BluetoothHealthCallback ,您會(huì)收到此對象的實(shí)例,它提供了有關(guān)可用的藍(lán)牙醫(yī)療設(shè)備,您必須使用執(zhí)行各種操作,如啟動(dòng)和終止連接的BluetoothHealth信息BluetoothHealth的API。
Accessibility
Android的4.0提高為視障用戶新的探索,觸摸模式和擴(kuò)展API,允許您提供有關(guān)視圖內(nèi)容的更多信息,或開發(fā)先進(jìn)的輔助功能。
通過觸控模式的新擴(kuò)展功能
視力減退的用戶現(xiàn)在可以探索通過屏幕觸摸并拖動(dòng)手指在屏幕上聽到的內(nèi)容的語音描述。 因?yàn)樘剿?#xff0c;觸摸模式就像一個(gè)虛擬的光標(biāo)工程,它允許屏幕閱讀器,以確定描述性的文字相同的方式,屏幕閱讀器可以軌跡球通過閱讀所提供的信息,當(dāng)android:contentDescription :contentDescriptionsetContentDescription后,一個(gè)模擬的“懸停”事件。 所以,認(rèn)為這是一個(gè)提醒,你應(yīng)該提供的意見,在您的應(yīng)用程序的描述性文字,特別ImageButton的EditText EditText ImageView ImageView的和其他部件,可能不是自然包含說明性文字。
視圖的輔助
面向有障礙的人群的新功能
其他輔助功能的API
拼寫檢查服務(wù)
一個(gè)新的拼寫檢查框架,允許應(yīng)用程序用類似于輸入法框架的方法來創(chuàng)建拼寫檢查。創(chuàng)建一個(gè)拼寫檢查,你必須實(shí)現(xiàn)一個(gè)繼承自SpellCheckerService類和SpellCheckerService.Session類的服務(wù),以便接口回調(diào)方法來提供基于文本的拼寫檢查。在SpellCheckerService.Session的回調(diào)方法里面,你必須返回拼寫建議的SuggestionsInfo對象
一個(gè)拼寫檢查服務(wù)的應(yīng)用,必須聲明服務(wù)所需的BIND_TEXT_SERVICE權(quán)限。服務(wù)也必須聲明一個(gè)intent-filter,它的action屬性為<action android:name="android.service.textservice.SpellCheckerService" />,
并且應(yīng)該包含一個(gè)<meta-data>元素,來聲明拼寫檢查的配置信息。
語音朗讀引擎(TTS)
android的TTS已經(jīng)顯著的擴(kuò)大了,它允許應(yīng)用程序非常簡便的實(shí)現(xiàn)自定義TTS,當(dāng)應(yīng)用程序在選在TTS引擎時(shí),想要使用幾個(gè)包含新的API的TTS引擎。
使用TTS引擎
在Android以前的版本里面,使用系統(tǒng)提供的TTS引擎,你應(yīng)該使用TextToSpeech類,來執(zhí)行TTS操作,或者你用setEngineByPackageName()方法來自定義一個(gè)引擎。在Android4.0,setEngineByPackageName()方法已經(jīng)過時(shí)了,現(xiàn)在你可以通過一個(gè)新的TextToSpeeck的構(gòu)造方法來指定引擎,該方法接收一個(gè)TTS引擎的包名。
你還可以通過getEngines()來查詢可用的TTS引擎,這個(gè)方法返回一個(gè)TextToSpeech.EngineInfo對象的集合,改對象包含引擎的圖標(biāo)、標(biāo)簽和包名等信息。
建立TTS引擎
在以前,自定義引擎的要求是引擎得使用一個(gè)無證本地頭文件,在Android4.0,有一套完整的API框架來建立TTS引擎。
一個(gè)基本的設(shè)置要求是需要一個(gè)響應(yīng)了INTENT_ACTION_TTS_SERVICE意圖的TextToSpeeckService的實(shí)現(xiàn),一個(gè)TTS引擎的主要工作發(fā)生在一個(gè)繼承TextToSpeechService的service的onSynthesizeText()回調(diào)里面,系統(tǒng)給這個(gè)方法提供了兩個(gè)對象:
SynthesisRequest:它包含多種數(shù)據(jù),包括合成的文字,環(huán)境,語速和語調(diào)
SynthesisRequest:這是一個(gè)你的TTS引擎提供了音頻流的接口。首先,引擎必須調(diào)用start()方法,來表明已經(jīng)準(zhǔn)備好提供音頻數(shù)據(jù),然后,調(diào)用audioAvailable()方法,傳遞一個(gè)byte buffer的音頻數(shù)據(jù)。一旦你的引擎通過了所有的音頻,調(diào)用done().
現(xiàn)在,改框架支持一個(gè)真正創(chuàng)建TTS引擎的API,本地代碼實(shí)現(xiàn)的支持已經(jīng)被刪除。查找一篇關(guān)于兼容層得博客,你可以把你舊的TTS引擎轉(zhuǎn)換到新的框架下。
網(wǎng)絡(luò)使用
Android4.0使用戶能夠精確地、明顯的看到他們的應(yīng)用程序正在使用多少網(wǎng)絡(luò)數(shù)據(jù),應(yīng)用程序設(shè)置允許用戶管理并設(shè)置網(wǎng)絡(luò)數(shù)據(jù)的使用權(quán),甚至禁止某個(gè)應(yīng)用使用后臺數(shù)據(jù)。為了避免您的應(yīng)用程序被禁止訪問后臺數(shù)據(jù),你應(yīng)該優(yōu)化策略,更加有效的利用連接數(shù)據(jù),并且調(diào)整您的應(yīng)用依賴的有效連接的類型。
如果你的應(yīng)用執(zhí)行很多網(wǎng)絡(luò)交互,你應(yīng)該提供一些設(shè)置,允許用戶來控制應(yīng)用程序數(shù)據(jù),例如,多久執(zhí)行同步數(shù)據(jù),是否只在WIFI環(huán)境下執(zhí)行上傳下載操作,是否使用數(shù)據(jù)漫游等等,通過提供這些設(shè)置,當(dāng)用戶處理數(shù)據(jù)管制時(shí),就不太可能禁用你的應(yīng)用程序來訪問數(shù)據(jù),因?yàn)樗麄兛梢愿泳_地控制應(yīng)用程序的數(shù)據(jù)使用。如果你提供了preference的activity來設(shè)置這些,你應(yīng)該在它的清單文件里面聲明intent-filter,并且action為ACTION_MANAGE_NETWORK_USAGE,例如:
<activity android:name="DataPreferences" android:label="@string/title_preferences">
??? <intent-filter>
?????? <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
?????? <category android:name="android.intent.category.DEFAULT" />
??? </intent-filter>
</activity>
這個(gè)intent-filter向系統(tǒng)表明,這個(gè)Activity是來控制應(yīng)用程序的數(shù)據(jù)使用的,所以,當(dāng)用戶在Setting里面檢查你的應(yīng)用程序使用了多少數(shù)據(jù)時(shí),就會(huì)顯示一個(gè)"View application settings"的按鈕,來啟動(dòng)你自己的preference activity,這樣用戶就可以更加詳細(xì)的指導(dǎo)應(yīng)用程序所使用的數(shù)據(jù)了。
還要注意,getBackgroundDataSetting()現(xiàn)在已經(jīng)被棄用了,它總是返回true,可以用getActiveNetWorkInfo()來替換。
當(dāng)你嘗試任何網(wǎng)絡(luò)交互時(shí),你應(yīng)該總是調(diào)用getActiveNetWorkInfo()來獲得短期當(dāng)前網(wǎng)絡(luò)信息NetWorkInfo,并且調(diào)用isConnected()放來來檢查設(shè)備是否連接,然后,你可以檢查其他連接屬性,例如是否漫游、是否連接到WIFI。
RenderScript
新增加了三個(gè)特點(diǎn)到RenderScript:
1、離屏渲染到一個(gè)幀緩沖對象
2、視圖內(nèi)渲染
3、RenderScript為每一個(gè)框架APIS
Allocation類現(xiàn)在支持一個(gè)USAGE_GRAPHICS_RENDER_TARGET內(nèi)存空間,它允許你直接的渲染和當(dāng)做一個(gè)幀緩沖對象來使用。
RSTextureView提供了一個(gè)在一個(gè)View里面顯示RenderScript圖形,不像RSSurfaceView,它創(chuàng)建了一個(gè)單獨(dú)的窗口。這個(gè)關(guān)鍵的區(qū)別允許你做一些事情,例如移動(dòng)、轉(zhuǎn)換或者和畫RenderScript圖像一樣,在一個(gè)布局里面的view里,激活一個(gè)RSTextureView。
Script.foEach()方法允許你調(diào)用從VM的RenderScript來計(jì)算腳本和自動(dòng)委托給設(shè)備上可用的核心,你不用直接使用這個(gè)方法,但是你寫的任何一個(gè)計(jì)算RenderScript都會(huì)有一個(gè)forEach()方法,你可以調(diào)用它在RenderScript類的反射里面,
你可以通過一個(gè)輸入Allocation給進(jìn)程來調(diào)用forEach()方法的發(fā)射,輸出Allocation來寫結(jié)果,一個(gè)FidldPacker數(shù)據(jù)結(jié)構(gòu)來使RenderScript獲得更多信息,只有其中一個(gè)Allocation是必須得,數(shù)據(jù)機(jī)構(gòu)是可選的。
企業(yè)
android4.0擴(kuò)展了企業(yè)應(yīng)用程序的功能,使其具有以下特點(diǎn):
VPNService
新的VPNService允許應(yīng)用程序構(gòu)建他們自己的VPN,作為一個(gè)Service運(yùn)行。一個(gè)VPN服務(wù),創(chuàng)建一個(gè)與它自己的地址和路由規(guī)則的虛擬網(wǎng)絡(luò)接口,并且通過一個(gè)文件描述符執(zhí)行所有讀寫操作。
要?jiǎng)?chuàng)建一個(gè)VPN服務(wù),需要用到VpnService.Builder,它允許你指定網(wǎng)絡(luò)地址,DNS服務(wù)器,網(wǎng)絡(luò)路由等等,當(dāng)完成時(shí),你可以通過調(diào)用establish()方法建立接口,她返回一個(gè)ParcelFileDescriptor對象。
由于VPN服務(wù)可以截取數(shù)據(jù)包,存在安全隱患。因此,如果你實(shí)現(xiàn)VpnService,那么你的服務(wù)必須要求BIND_VPN_SERVICE,來確保只有系統(tǒng)能綁定它(只有系統(tǒng)被授權(quán)這個(gè)權(quán)限——應(yīng)用程序不能要求),然后,使用你的VPN服務(wù),用戶必須在系統(tǒng)設(shè)置中手動(dòng)啟用它。
設(shè)備政策
應(yīng)用程序管理設(shè)備的限制條件,現(xiàn)在可以禁止相機(jī)使用setCameraDisabled()和USES_POLICY_DISABLE_CAMERA屬性。
證書管理
新的KeyChain類提供了允許你導(dǎo)入和訪問系統(tǒng)密鑰存儲器中正數(shù)的API,證書簡化安裝的客戶端證書(來驗(yàn)證用戶的身份)和證書頒發(fā)機(jī)構(gòu)證書(以驗(yàn)證服務(wù)器的身份)。如Web瀏覽器或電子郵件客戶端應(yīng)用程序可以訪問已安裝的證書來驗(yàn)證用戶到服務(wù)器。詳見KeyChain的文檔。
設(shè)備傳感器
在Android4.0新加了兩個(gè)傳感器類型:
1、TYPE_AMBIENT_TEMPERATURE:一個(gè)提供環(huán)境(室)溫度(攝氏度)的溫度傳感器 。
2、TYPE_RELATIVE_HUMIDITY:提供以百分比的相對環(huán)境(室內(nèi))濕度:濕度傳感器。
如果設(shè)備有TYPE_AMBIENT_TEMPERATURE和 TYPE_RELATIVE_HUMIDITY傳感器,你可以用它們來計(jì)算露點(diǎn)和絕對濕度。
以前的溫度傳感器,TYPE_TEMPERATURE,已被棄用。您應(yīng)該使用TYPE_AMBIENT_TEMPERATURE傳感器來代替。
此外,Android的三大綜合傳感器已大大提高,所以他們現(xiàn)在有更低的延遲和平滑輸出 。這些傳感器包括重力感應(yīng)器(TYPE_GRAVITY),旋轉(zhuǎn)矢量傳感器(TYPE_ROTATION_VECTOR),和線性加速度傳感器(TYPE_LINEAR_ACCELERATION)。改進(jìn)的傳感器依靠陀螺儀傳感器,以提高它們的輸出,因此,設(shè)備上出現(xiàn)的傳感器,有一個(gè)陀螺儀。
Action Bar? 工具欄
Action Bar已經(jīng)更新,提供幾種新的行為。最重要的是,該系統(tǒng)管理Action Bar優(yōu)美的尺寸和結(jié)構(gòu)在更小的屏幕上運(yùn)行時(shí)為了提供一個(gè)最佳的用戶體驗(yàn)所有屏幕尺寸。例如,當(dāng)屏幕狹窄(例如,當(dāng)一個(gè)手機(jī)在肖像取向),Action Bar的導(dǎo)航標(biāo)簽出現(xiàn)在一個(gè)“堆疊柱形”,直接出現(xiàn)在下面的主要Action Bar。你也可以選擇在一個(gè)“Split action bar”,這地方都運(yùn)行項(xiàng)目在一個(gè)獨(dú)立的當(dāng)屏幕底部的屏幕縮小。
Split action bar? 分裂工具欄
如果你的功能條包括幾個(gè)行動(dòng)項(xiàng)目,不是所有的人都會(huì)融入動(dòng)作條在一條狹窄的屏幕,所以這個(gè)系統(tǒng)會(huì)把更多的人進(jìn)入溢流菜單。然而,機(jī)器人4.0允許你使“Split action bar”,使更多的行動(dòng)項(xiàng)目就會(huì)出現(xiàn)在屏幕上在一個(gè)獨(dú)立的功能條在屏幕的底部。為了使分裂的動(dòng)作條,加上機(jī)器人:uiOptions以“splitActionBarWhenNarrow“要么你的<應(yīng)用>標(biāo)簽或者個(gè)人在你<活動(dòng)>標(biāo)簽體現(xiàn)文件。當(dāng)被激活后,系統(tǒng)會(huì)增加一個(gè)額外的功能條屏幕底下的所有行動(dòng)項(xiàng)目時(shí),屏幕窄(沒有行動(dòng)項(xiàng)目將出現(xiàn)在主要的動(dòng)作條)。
如果你想使用這個(gè)導(dǎo)航標(biāo)簽ActionBar提供的。標(biāo)簽的api,但不需要的主要?jiǎng)幼鳁l上(你想只有鏈接出現(xiàn)在頂端),然后使分裂的動(dòng)作條如上所述,也稱setDisplayShowHomeEnabled(錯(cuò)誤的)禁用應(yīng)用程序的圖標(biāo)的動(dòng)作條。一無所功能條中的主要行為,它是唯一的disappears-all導(dǎo)航標(biāo)簽在頂部和行動(dòng)項(xiàng)目在屏幕的底部。
Action bar styles功能樣式
如果你想要申請習(xí)慣的功能條上的造型,你可以用新的風(fēng)格和性能backgroundStacked backgroundSplit應(yīng)用背景或顏色堆疊柱形和Split action bar。你也可以將這些風(fēng)格與setStackedBackgroundDrawable在運(yùn)行時(shí)()和setSplitBackgroundDrawable()。
Action provider? 功能提供
新ActionProvider類允許你創(chuàng)建一個(gè)專門處理運(yùn)行項(xiàng)目。一個(gè)行動(dòng)Action provider可以定義一個(gè)行動(dòng)的觀點(diǎn),一個(gè)默認(rèn)的動(dòng)作行為,與每項(xiàng)行動(dòng)子菜單,它是相互關(guān)聯(lián)的。當(dāng)你想創(chuàng)造一個(gè)行動(dòng)項(xiàng)目時(shí),動(dòng)態(tài)的行為(比如一個(gè)變量作用的觀點(diǎn),默認(rèn)的行動(dòng),或者子菜單),延長ActionProvider是個(gè)好辦法,以創(chuàng)造一個(gè)可用的組件,而不是處理各項(xiàng)行動(dòng)項(xiàng)目或活動(dòng)轉(zhuǎn)換你的碎片。
例如,ShareActionProvider的延伸,是ActionProvider行動(dòng)使“分享”的動(dòng)作條。而不是用傳統(tǒng)項(xiàng)目,調(diào)用ACTION_SEND意圖,你可以使用這一功能有一個(gè)行動(dòng)提供了一個(gè)下拉列表的觀點(diǎn)與應(yīng)用程序處理ACTION_SEND意圖。當(dāng)用戶選擇一個(gè)應(yīng)用程序使用的功能,ShareActionProvider要選擇和行動(dòng)提供更快的存取到應(yīng)用當(dāng)中。
要聲明一個(gè)行動(dòng)提供一項(xiàng)功能,包括android:actionProviderClass屬性在<item>元素為你的活動(dòng)中的選項(xiàng)菜單,類名的功能提供更有價(jià)值的。例如:
Java代碼:
<item android:id="@+id/menu_share"????? android:title="Share"????? android:showAsAction="ifRoom"????? android:actionProviderClass="android.widget.ShareActionProvider" />
你的onCreateOptionsMenu()回收方法在活動(dòng)中,搜索一個(gè)實(shí)例,在菜單功能中提供設(shè)置的意圖:
Java代碼:
public boolean onCreateOptionsMenu(Menu menu) {??? getMenuInflater().inflate(R.menu.options, menu);??? ShareActionProvider shareActionProvider =????????? (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();??? // Set the share intent of the share action provider.??? shareActionProvider.setShareIntent(createShareIntent());??? ...??? return super.onCreateOptionsMenu(menu);
}
利用ShareActionProvider為例,看ApiDemos ActionBarActionProviderActivity。
Collapsible action views可分解的功能視圖
看步驟時(shí),提供一個(gè)意圖反應(yīng)觀點(diǎn)去綁定他們的行動(dòng)視圖狀態(tài)和傳統(tǒng)項(xiàng)功能的國家。在此之前,只有SearchView崩潰的時(shí)候才支持作為行動(dòng)的觀點(diǎn),但是現(xiàn)在你可以添加一個(gè)行動(dòng)看任何行動(dòng)項(xiàng)目和擴(kuò)展?fàn)顟B(tài)之間切換(動(dòng)作片的觀點(diǎn)是可見的)和倒塌的狀態(tài)(行動(dòng)項(xiàng)目是可見)。
聲明一個(gè)行動(dòng)項(xiàng)目,包含一個(gè)反應(yīng)觀點(diǎn)是折疊的,包括“collapse Action View“標(biāo)記,android:show As Action屬性為<item>元素在菜單的XML文件。當(dāng)一個(gè)行動(dòng)受到意圖開關(guān)的擴(kuò)展和崩潰的時(shí)候,注冊的一個(gè)實(shí)例Menu Item。On Action Expand Listener有關(guān)
MenuItem通過電話set On Action Expand Listener。 通常,你會(huì)這樣做在on Create Options Menu回收。
控制濕陷性行為的觀點(diǎn),你可以叫collapse Action View和expand Action View分別Menu Item。
當(dāng)創(chuàng)建一個(gè)定制的行動(dòng)的觀點(diǎn),你也可以執(zhí)行新的Collapsible Action View接口調(diào)用時(shí)接受這種意圖正在擴(kuò)大并崩潰。
Other APIs for action bar其它api為功能條
?setHomeButtonEnabled()是你指定的圖標(biāo)/標(biāo)志 表現(xiàn)這個(gè)按鈕來駕船回家或“上”(通過“真”使它像一個(gè)按鈕)。
setLogo和setIcon(),允許你可以自定義動(dòng)作條的圖標(biāo)或標(biāo)志的運(yùn)行時(shí)間。
?Fragment.setMenuVisibility()讓你啟用或禁用的可見性的選項(xiàng)菜單項(xiàng)公告的碎片。這是有益的,如果碎片被添加到活動(dòng),但不可見的,因此應(yīng)該被隱藏的菜單項(xiàng)。
?FragmentManager.invalidateOptionsMenu()讓你解除本活動(dòng)在不同的菜單的生命周期中碎片從活動(dòng)采用等效方法可能得到的。
User Interface and Views用戶界面和觀點(diǎn)
介紹android 4.0各種新觀點(diǎn)和其它UI組件。
GridLayout網(wǎng)格布局
GridLayout 是一個(gè)新的視角地方子視圖在一個(gè)矩形網(wǎng)格。不像TableLayout,GridLayout依靠扁平式,不用中間觀點(diǎn),如表行提供結(jié)構(gòu)。相反,我們指定哪些行(s)和列(s)他們應(yīng)該占據(jù)(單元可以跨越多行和/或列),在默認(rèn)情況下,是奠定在網(wǎng)格順序的行和列。GridLayout取向決定是否連續(xù)的默認(rèn)了孩子水平或垂直。間隔空間的我們可能被指定或者通過,使用新的空間景觀實(shí)例或設(shè)置相應(yīng)的參數(shù)對我們。
看到ApiDemos為案例,使用GridLayout。
TextureView結(jié)構(gòu)視圖
TextureView是一個(gè)全新的視角,允許你來顯示內(nèi)容流,比如視頻或一個(gè)開放式繪圖介面現(xiàn)場。雖然SurfaceView相似,TextureView是獨(dú)特的,因?yàn)樗憩F(xiàn)得像一個(gè)普通的觀點(diǎn),而不是創(chuàng)造另一個(gè)窗口,所以你可以把它像其他視圖對象。例如,你可以申請轉(zhuǎn)變,有生命的,它使用ViewPropertyAnimator,或調(diào)整其混濁setAlpha()。
你要慎重,TextureView只是在一個(gè)硬件加速的窗口。
Switch widget開關(guān)窗口
你可以用android:textOn 和 android:textOff屬性指明文字出現(xiàn)在交換機(jī)在斷斷續(xù)續(xù)的設(shè)置。機(jī)器人:文本屬性也允許你方標(biāo)簽和開關(guān)。
一個(gè)案例為使用開關(guān),看到開關(guān)。xml文件和相關(guān)布局開關(guān)的活動(dòng)。
Popup menus彈出菜單
介紹了Android的PopupMenu 3.0創(chuàng)造短語境菜單彈出一個(gè)錨點(diǎn)你指定(通常為重點(diǎn)項(xiàng)目的選擇)。Android 4.0擴(kuò)展PopupMenu和兩個(gè)有用的特點(diǎn):
你現(xiàn)在可以很容易從XML的彈出菜單,菜單資源與充氣(),通過菜單資源ID。
你也可以創(chuàng)建一個(gè)PopupMenu。接收一個(gè)回調(diào)函數(shù)OnDismissListener當(dāng)菜單注銷。
Preferences選擇權(quán)
一個(gè)新的TwoStatePreference抽象類作為依據(jù),提供“偏好選擇選項(xiàng)。新SwitchPreference是一個(gè)擴(kuò)展,提供了一種TwoStatePreference開關(guān)窗口的觀點(diǎn),允許用戶偏好設(shè)定打開或關(guān)閉開關(guān),不需要開一個(gè)額外的偏好屏幕或?qū)υ捒颉@?設(shè)置應(yīng)用程序使用一個(gè)SwitchPreference及藍(lán)牙無線網(wǎng)絡(luò)的設(shè)置。
System themes系統(tǒng)主題
對所有應(yīng)用都默認(rèn)主題的目標(biāo)android4.0(通過設(shè)置或者targetSdkVersion或minSdkVersion“14 "或更高版本)現(xiàn)在是“設(shè)備默認(rèn)為“主題:Theme.DeviceDefault。 這或許是最黑暗的Holo主題或者一個(gè)不同的黑暗主題的具體規(guī)定裝置。
這個(gè)主題是保證不改變到另一個(gè)設(shè)備運(yùn)行相同的版本的android。如果你明確適用于任何的主題。你的主題活動(dòng),是可以放心,這些主題將不會(huì)改變角色在不同的設(shè)備在同一平臺版本。
如果你希望你的應(yīng)用程序融入整個(gè)裝置的主題(如當(dāng)不同的原始設(shè)備制造商提供不同的默認(rèn)主題為系統(tǒng)),你應(yīng)該明確適用的主題從這個(gè)主題。DeviceDefault。
Options menu button選項(xiàng)菜單按鈕
從android4.0,你會(huì)發(fā)現(xiàn)手機(jī)硬件不再需要一個(gè)菜單按鈕。然而,你不需要去擔(dān)心這個(gè),如果你現(xiàn)有的應(yīng)用程序提供了一個(gè)選項(xiàng)菜單并且希望會(huì)有一個(gè)菜單按鈕。確保現(xiàn)有的程序繼續(xù),該系統(tǒng)提供了一個(gè)在螢?zāi)簧系牟藛伟粹o的程序被設(shè)計(jì)為舊版的android。
最好的用戶體驗(yàn),新的和更新程序應(yīng)該使用ActionBar提供菜單項(xiàng)和設(shè)置targetSdkVersion“14 "利用最新的框架默認(rèn)的行為。
Controls for system UI visibility控制系統(tǒng)用戶界面
從早期的Android,系統(tǒng)已經(jīng)成功一個(gè)UI組件稱為狀態(tài)欄,蘊(yùn)藏在頂部手機(jī)設(shè)備傳輸信息如載波信號、時(shí)間、通知,等等。Android系統(tǒng),3.0增加的裝置,制度在屏幕的底部提供系統(tǒng)導(dǎo)航的控制(家,回來,等等),又一個(gè)接口用于傳統(tǒng)的元素提供狀態(tài)欄。在Android 4.0,該系統(tǒng)提供了一種新型的系統(tǒng)界面稱為導(dǎo)航欄。你可能會(huì)考慮導(dǎo)航欄一個(gè)re-tuned版本的系統(tǒng)設(shè)計(jì)handsets-it容器提供導(dǎo)航的控制裝置不需要硬件同行操縱系統(tǒng),但它留下了系統(tǒng)用戶界面和酒吧的通知設(shè)置控制。這樣,一種裝置,它提供了導(dǎo)航欄也有狀態(tài)欄在頂部。
直到今天,您可以隱藏狀態(tài)欄上使用手機(jī)FLAG_FULLSCREEN標(biāo)志。在Android 4.0,控制系統(tǒng)api容器的知名度已經(jīng)被更新,以便更好地反映了對系統(tǒng)行為的容器和導(dǎo)航欄。
SYSTEM_UI_FLAG_LOW_PROFILE標(biāo)記取代了行STATUS_BAR_HIDDEN標(biāo)志。 當(dāng)設(shè)置時(shí),這個(gè)標(biāo)志使“低調(diào)”模式為系統(tǒng)的容器或?qū)Ш綑凇?dǎo)航按鈕暗淡,其他元素酒吧也隱藏系統(tǒng)。使這是有益的創(chuàng)造更多的引人入勝的游戲系統(tǒng)按鈕。
SYSTEM_UI_FLAG_VISIBLE標(biāo)記取代了行STATUS_BAR_VISIBLE標(biāo)記,要求系統(tǒng)容器或?qū)Ш綑诳梢姟?
SYSTEM_UI_FLAG_HIDE_NAVIGATION行是一種新的標(biāo)記要求導(dǎo)航欄隱藏完全。 注意,這只是工作為導(dǎo)航欄采用手機(jī)(不隱藏系統(tǒng)容器)。導(dǎo)航欄盡快返回查看系統(tǒng)接收用戶輸入的信息。因此,該模式是有用的主要是為視頻回放或其他案件中,整個(gè)屏幕是需要的,但用戶輸入并不是必須的。
您可以設(shè)置每一個(gè)這樣的標(biāo)志和導(dǎo)航欄系統(tǒng)調(diào)用setSystemUiVisibility()在任何觀點(diǎn)在你的活動(dòng)。視窗管理器(OR-together)結(jié)合標(biāo)記從所有的觀點(diǎn)在你的窗口并把它們應(yīng)用到系統(tǒng)界面只要你的窗口有輸入焦點(diǎn)。當(dāng)你失去窗口輸入焦點(diǎn)(用戶導(dǎo)航,你的應(yīng)用程序,或者出現(xiàn)一個(gè)對話框),你的標(biāo)記停止生效。同樣的,如果你把那些觀點(diǎn)從視圖層次中他們的標(biāo)記不再適用。
其他事件同步活動(dòng)改變系統(tǒng)能見度UI(例如,隱藏的動(dòng)作條或其他用戶界面控制該系統(tǒng)界面隱藏),你應(yīng)該登記的景色。OnSystemUiVisibilityChangeListener時(shí)要通知知名度的系統(tǒng)導(dǎo)航欄欄或改變。
看到OverscanActivity演示不同的系統(tǒng)用戶界面選項(xiàng)。
輸入框架
Android 4.0增加了對光標(biāo)懸停事件、手寫筆、鼠標(biāo)按鈕事件的支持。
懸停事件
View類現(xiàn)在支持“懸停”事件,通過對指針設(shè)備(如鼠標(biāo)或其他設(shè)備驅(qū)動(dòng)屏幕上的光標(biāo))支持,使得其用戶交互更加豐富。
為了接收控件上的懸停事件,需要實(shí)現(xiàn)View.OnHoverListener,并通過setOnHoverListener() 進(jìn)行注冊。當(dāng)懸停事件觸發(fā)時(shí),您的監(jiān)聽器onHover()就會(huì)被調(diào)用, 參數(shù)中含有觸發(fā)懸停的View和懸停事件MotionEvent。 懸停事件可以是下列操作之一:
ACTION_HOVER_ENTER
ACTION_HOVER_EXIT
ACTION_HOVER_MOVE
如果你在View.OnHoverListener中 onHover()處理了此事件,則應(yīng)該返回真。 如果返回false,則懸停事件將被繼續(xù)分派到它的父視圖中。
如果你的應(yīng)用程序使用到了隨著狀態(tài)改變外觀的控件,如按鈕或其他控件。那么恭喜你,現(xiàn)在可以通過android:state_hovered 和state_hovered屬性狀態(tài)列表提供不同的背景繪制來響應(yīng)懸停事件。
SDK中提供了對于懸停事件的示范,請參看ApiDemos工程中的Hover類。
手寫筆和鼠標(biāo)按鈕事件
Android現(xiàn)在提供新的APIs,用于接收來自手寫設(shè)備的輸入,如數(shù)字化儀平板電腦周邊設(shè)備或啟用手寫觸摸屏的輸入。
手寫輸入,可以模擬觸摸和鼠標(biāo)的輸入。當(dāng)手寫筆在接觸數(shù)字化儀上面移動(dòng)時(shí),應(yīng)用程序就可以接收到觸摸事件,這和用手指觸摸顯示屏效果是一樣的。 當(dāng)手寫筆是懸停在數(shù)字化儀之上,應(yīng)用程序接收到懸停事件,這和鼠標(biāo)觸發(fā)的懸停事件效果是一樣的。
通過MotionEvent 中的 getToolType()可以得到每一個(gè)指針設(shè)備中的“工具類型“,您的應(yīng)用程序可以以此區(qū)分手指,鼠標(biāo),手寫筆和擦出動(dòng)作。目前定義的工具類型:TOOL_TYPE_UNKNOWN 、 TOOL_TYPE_FINGER、TOOL_TYPE_MOUSE 、TOOL_TYPE_STYLUS 、TOOL_TYPE_ERASER 。通過查詢工具類型,您的應(yīng)用程序可以根據(jù)從手指或鼠標(biāo)輸入不同的方式來分別處理輸入。
你也可以通過MotionEvent中的getButtonState()方法,來查詢鼠標(biāo)或者按鈕的狀態(tài)。目前定義的
按鈕狀態(tài)是:
BUTTON_PRIMARY??
BUTTON_SECONDARY??
BUTTON_TERTIARY???
BUTTON_BACKBU??
BUTTON_FORWARD
為了方便起見,后面鼠標(biāo)按鈕被自動(dòng)映射到KEYCODE_BACKKEYCODE_FORWARD鍵,應(yīng)用程序可以處理這些按鍵,支持鼠標(biāo)按鈕的基礎(chǔ)和前進(jìn)導(dǎo)航。
此外,一些手寫輸入設(shè)備也可以提供筆尖和數(shù)字化儀的距離,手寫筆的傾斜角度,手寫筆的方向角,使我們能夠得到更精確的位置和接觸壓力。 您可以通過向getAxisValue()輸入AXIS_DISTANCE , AXIS_TILT ,和AXIS_ORIENTATION 幾個(gè)Axis Codes來查詢這些信息。
SDK提供了工具類型、按鈕狀態(tài)和 Axis Codes使用的演示,請參看ApiDemos工程中的TouchPaint類。
Properties
新的Property類提供了一個(gè)快速,高效和簡單的方式來對任何對象指定一個(gè)屬性,調(diào)用者可以通過它來完成設(shè)置/獲取該對象的值。同時(shí),也允許來傳遞字段/方法引用的功能,并允許通過代碼來獲取字段/方法的值,即使我們不知道字段/方法的一些具體的信息。
比如,如果你想設(shè)置foo對象的bar字段的值,你以前需要這樣來寫:
??????????????? foo.bar = value;
如果你想調(diào)用foo對象中的私有字段bar,你以前需要這樣來寫:
??????????????? foo.setBar(value);
然而,如果你想傳遞foo實(shí)例和通過其它的代碼來設(shè)置bar字段的值,在android sdk4.0以前是沒法做到的。
使用Property類,你可以在Foo類中定義一個(gè)Property對象BAR,這樣你就可以通過Foo類中的foo實(shí)例來設(shè)置它的值,如下:
??????? BAR.set(foo, value);
所以現(xiàn)在View類就可以充分利用Property類來讓我們可以設(shè)置一些字段。比如在android 3.0時(shí)加入到View中的轉(zhuǎn)換的屬性(ROTATION, ROTATION_X, TRANSLATION_X等等)
ObjectAnimator類也可以使用Property 類,你可以用Property來創(chuàng)建一個(gè)ObjectAnimator ,它會(huì)更快,更高效,比基于字符串的方法更據(jù)有類型安全性。
Hardware Acceleration硬件加速
從android 4.0開始,所有的窗口都會(huì)默認(rèn)開啟硬件加速。當(dāng)然,我們的程序中得把targetSdkVersion 和 minSdkVersion這兩個(gè)值設(shè)置成14或者更高。通過硬件加速可以使用戶體驗(yàn)到動(dòng)畫更流暢,滾動(dòng)時(shí)再流暢,也會(huì)提高程序的整體的性能.
如果有必要,用戶可以手動(dòng)禁止硬件加速。在AndroidManifest文件中可以利用 hardwareAccelerated 屬性來對個(gè)別個(gè)的<activity>元素或者<application>元素禁止硬件加速。用戶也可以在代碼中對個(gè)別的View進(jìn)行禁止硬件加速,如:
??????? setLayerType(LAYER_TYPE_SOFTWARE).
更多關(guān)于硬件加速的信息,包括不支持的繪圖操作列表,可以查看Hardware Acceleration 文檔
JNI的變化
在android以前的版本中,JNI本地的引用不是間接的句柄;android 利用的是直接的指針。在垃圾收集器沒有移動(dòng)對象之前,這不是一個(gè)問題. 但是好像能工作是因?yàn)榭赡芤呀?jīng)寫了一些存在bug的代碼.
JNI本地引用的詳細(xì)信息(里里外外)都寫在了JIN 提示的Local and Global References中。在android 4.0中,CheckJNI已經(jīng)被增強(qiáng),以便用來檢測這些錯(cuò)誤。請關(guān)注android開發(fā)者的博客,來了解一般的JNI引用的錯(cuò)誤和怎么樣解決他們。
關(guān)于JNI的這些改變只是影響那些目標(biāo)是android 4.0以上的程序,也就是說 targetSdkVersion 和 minSdkVersion等于14或者更高的程序 .如果你設(shè)置的值比14低,那么JNI的本地引用還是和以前一樣.
WebKit瀏覽器引擎
1、WebKit更新到534.30版本
2、在WebView和內(nèi)置的瀏覽器中支持印度的字體(梵文,孟加拉語,泰米爾語,需要通過復(fù)雜的字形來組合的字符)
3、在WebView和內(nèi)置的瀏覽器中支持埃塞俄比亞語,格魯吉亞語,亞美尼亞語的字體。
4、支持WebDriver,通過它可以使得利用WebView來測試程序更加的容易
Android 瀏覽器
瀏覽器程序添加了下面的一些特征來支持web程序。
更新了V8 javaScript編譯器,以提交性能。
另外顯著的增強(qiáng)了android 3.0的一些功能
1、在所有的頁面上支持固定位置元素
2、HTML上媒體的捕獲
3、設(shè)備方向事件
4、css中3d的轉(zhuǎn)換
Permissions權(quán)限
下面是新添加的權(quán)限
1、ADD_VOICEMAIL:允許語音信箱服務(wù)來添加一個(gè)語音郵件到設(shè)備
2、BIND_TEXT_SERVICE:實(shí)現(xiàn)了SpellCheckerService 服務(wù)的服務(wù)必須添加這個(gè)權(quán)限
3、BIND_VPN_SERVICE:實(shí)現(xiàn)了VpnService 服務(wù)的服務(wù)必須添加這個(gè)權(quán)限
4、READ_PROFILE: 提供一個(gè)讀權(quán)限給 ContactsContract.Profile提供器
5、WRITE_PROFILE: 提供一個(gè)寫權(quán)限給 ContactsContract.Profile提供器
Device Features設(shè)備特征
下面是新添加的設(shè)備特征
1、FEATURE_WIFI_DIRECT: 聲明些應(yīng)用程序WIFI來進(jìn)行點(diǎn)對點(diǎn)和通信
2、對于在android 4.0(api 級別14)上所有的api的變化,請看API Differences Report文檔
以前的API
除了上面講到的API,Android4.0還支持之前發(fā)布的所有API。因?yàn)锳ndroid3.X平臺只支持大屏幕的設(shè)備,如果你主要為手持設(shè)備進(jìn)行開發(fā),你不需要擔(dān)心當(dāng)前版本增加的所有API。
現(xiàn)在我們看一下你可能會(huì)忽略掉的一些值得注意的地方,現(xiàn)在它們在手持設(shè)備上也可以使用了。
Android3.0
1、Fragment:一個(gè)框架組件,允許你將activity中不同的元素分離到自包含的模塊中,每個(gè)模塊定義自己的UI和生命周期。詳情請看Fragments。
2、Action Bar:activity中的傳統(tǒng)的標(biāo)題欄的一個(gè)替代品。左側(cè)包含一個(gè)應(yīng)用logo,并且為菜單項(xiàng)提供了新接口。詳情請看Action Bar。
3、Loader:一個(gè)框架組件,方便在組合的UI中異步加載數(shù)據(jù),可以動(dòng)態(tài)獲取數(shù)據(jù)而不用擔(dān)心阻塞主線程。詳情請看Loaders。
4、System clipboard:應(yīng)用可以使用系統(tǒng)的剪貼板拷貝和粘貼數(shù)據(jù)(不僅僅是文本內(nèi)容)。可以剪貼的數(shù)據(jù)包括:普通文本,一個(gè)URL,或者是一個(gè)intent。詳情請看Copy and Paste。
5、Drag and drop:在view中內(nèi)置了一個(gè)API集合,可以方便的進(jìn)行拖拽的開發(fā)。詳情請看Drag and Drop。
6、一個(gè)全新的靈活的動(dòng)畫框架,你可以讓任何對象(例如:view,drawable,fragment,object等等)的任何屬性動(dòng)起來,并且定義動(dòng)畫的各種屬性,例如:持續(xù)時(shí)間,補(bǔ)間內(nèi)容,如何重復(fù)等等。新框架使得在Android上開發(fā)動(dòng)畫比以前更簡單。詳情請看Property Animation。
7、RenderScript graphics and compute engine:RenderScript提供高性能的3D圖片呈現(xiàn),和高性能的本地級別的計(jì)算API,你可以用C(標(biāo)準(zhǔn)C99)來寫,提供了你希望的從本地環(huán)境執(zhí)行的性能,同時(shí)可以跨越各種CPU和GPU。詳情請看RenderScript。
8、Hardware accelerated 2D graphics:你可以為你的應(yīng)用開啟OpenGL呈現(xiàn)功能,通過在你的manifest文件的<application>元素中設(shè)置{android:hardwareAccelerated=”true”},也可以為每個(gè)activity單獨(dú)設(shè)置。可以使得動(dòng)畫更加平滑,滾動(dòng)更加平滑,提高整體性能和用戶的交互響應(yīng)。
請注意:如果你把應(yīng)用的minSdkVersion或者是targetSdkVersion設(shè)置為14或者更高,硬件加速器是默認(rèn)開啟的。
Android3.1
1、USB APIs:通過強(qiáng)大的API,可以在應(yīng)用中整合已經(jīng)連接的外圍設(shè)備。API基于USB和內(nèi)置在平臺的服務(wù),包括對USB宿主和設(shè)備進(jìn)行交互的支持。詳情請看USB Host and Accessory。
2、MTP/PTP APIs:應(yīng)用可以和直接連接的照相機(jī)或者是其他PTP設(shè)備交互,在設(shè)備附加和移除的時(shí)候收到通知,管理這些設(shè)備的文件和存儲,進(jìn)行文件和元數(shù)據(jù)的交換。MTP APIs實(shí)現(xiàn)了PTP(圖片傳輸協(xié)議),PTP是MTP(媒體傳輸協(xié)議)的子集。詳情請看android.mtp。
3、RTP APIs:Android開放了內(nèi)置的RTP(實(shí)時(shí)傳輸協(xié)議)的API,在應(yīng)用中可以用來管理實(shí)時(shí)和交互數(shù)據(jù)流。尤其是,在提供VOIP的應(yīng)用,視頻通話,視頻會(huì)議,可以用API初始化音頻流的會(huì)話,在網(wǎng)絡(luò)上傳輸和接受數(shù)據(jù)流。詳情請看android.net.rtp。
4、支持操縱桿和普通的手勢輸入。
更多詳情請查看Android 3.1 Platform。
API Level
Android4.0的標(biāo)識為14,是系統(tǒng)本身存儲的標(biāo)識。這個(gè)標(biāo)識被我們稱為API等級,幫助系統(tǒng)在安裝應(yīng)用之前,準(zhǔn)確的確定一個(gè)應(yīng)用是否和系統(tǒng)兼容,在你的應(yīng)用中引入Android4.0的API,需要你的代碼在支持API Level14甚至更高的平臺編譯通過。如果需要,可以在manifest文件的<use-sdk>元素中添加 android:minSdkVersion=”14”。
內(nèi)置的應(yīng)用
在系統(tǒng)中內(nèi)置了下面的應(yīng)用。
API的演示
Browser瀏覽器
Calculator計(jì)算器
Calendar日歷
Camera相機(jī)
Clock時(shí)鐘
Custom Locale自定義區(qū)域
Dev Tools開發(fā)工具
Downloads下載
Email電子郵件
Gallery畫廊
-
Gestures Builder手勢生成器
-
Messaging消息
-
Music音樂
-
People人民
-
Phone電話
-
Search搜索
-
Settings設(shè)置
-
Speech Recorder語音記錄器
-
Speech Recorder語音記錄器
-
Widget Preview小工具預(yù)覽
轉(zhuǎn)載于:https://www.cnblogs.com/neilyo/archive/2011/10/26/2225248.html
總結(jié)
以上是生活随笔為你收集整理的Android4.0新特性 中文翻译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何让自己安心学习
- 下一篇: 什么是多方计算multi-party c