Android 4.4 KitKat雖然已經(jīng)發(fā)布很久了,還升級(jí)了好多次,但在浩如煙海的源代碼中,依然隱藏著大量的新東西等待挖掘,比如第三方應(yīng)用對(duì)SD卡的訪問。
安卓系統(tǒng)手機(jī)有一套自己的存儲(chǔ)管理制度:幾乎任何類型的存儲(chǔ)設(shè)備都被稱為“外部存儲(chǔ)”(external storage),包括內(nèi)部的NAND閃存,這個(gè)叫做“主要存儲(chǔ)”(primary storage),而其他的一切都是“次要存儲(chǔ)”(secondary storage),比如SD卡。
隨著安卓系統(tǒng)的不斷升級(jí),第三方應(yīng)用對(duì)存儲(chǔ)的訪問權(quán)限控制經(jīng)過了多次調(diào)整,詳細(xì)三說起來就復(fù)雜了,這里重點(diǎn)說最早、最常用的寫入要求權(quán)限“WRITE_EXTERNAL_STORAGE”,它可以讓應(yīng)用寫入主要存儲(chǔ)(內(nèi)置閃存),但不能寫入次要存儲(chǔ)(SD卡)。
安卓4.4里邊,對(duì)于對(duì)所有外部存儲(chǔ),其上的文件屬性都改為基于文件夾結(jié)構(gòu),應(yīng)用無需獲取WRITE_EXTERNAL_STORAGE權(quán)限,即可在外部存儲(chǔ)上管理與自己包名相關(guān)的文件夾。舉例來說,如果應(yīng)用的包名是name com.example.foo,那么外部存儲(chǔ)上的Android/data/com.example.foo/文件夾就是它的了,可隨意訪問。
這其中也包括SD卡,第三方應(yīng)用可以在上邊創(chuàng)建一個(gè)屬于自己的專區(qū),隨意讀寫、刪除,就像在內(nèi)置存儲(chǔ)是各樣。
除此文件夾之外的其他地方,第三方應(yīng)用仍然會(huì)被嚴(yán)格限制,得不到寫入和刪除權(quán)限。
不過這也存在一個(gè)潛在風(fēng)險(xiǎn):SD卡是可以隨意插拔的,可以在電腦上訪問,因此可能會(huì)導(dǎo)致泄密。
另外需要特別注意的是,應(yīng)用卸載的時(shí)候,在SD卡上創(chuàng)建的相應(yīng)文件夾、數(shù)據(jù)都會(huì)被同時(shí)完全刪除,所以如果有照片、文檔等個(gè)人資料,應(yīng)當(dāng)避免這么做。
最后,U盤等設(shè)備的訪問控制不在本文討論范圍之內(nèi)。
最后的最后,安卓系統(tǒng)有自己的標(biāo)準(zhǔn),OEM廠商、ROM開發(fā)者又有各自的一套,經(jīng)常不會(huì)嚴(yán)格遵循Google制定的規(guī)則,因此剛才說的種種不一定會(huì)出現(xiàn)在你的手機(jī)里。