我本身是開發者所以有在關注sdcard權限的問題,這裡貢獻一些我所了解到的Android 4.3之前:app只要取得write external permission即可完整對sdcard讀寫Android 4.4:app不須取得write external permission也可對該app在sdcard中所擁有的路徑之下做讀寫,一般而言是/sdcard/Android/data/xxx.xxx.xxx,此路徑下的資料在app被解除安裝後也會被刪除,重點來了,app在這個版本裡面無法對sdcard下的其他路徑做讀寫,除非root,所以才會有之前那些鳥事Android 5.0:app又可以對sdcard的所有路徑做讀寫了,但必須取得使用者的同意,於是Google給app的開發者一個api,只要這個app想對sdcard中某個路徑做讀寫時,請使用此api"請求"使用者同意,使用者此時須選一個路徑給該app做讀寫,好了,於是就會有ES file manager那個畫面出來,那個畫面就是在要求使用者給他權限的,其他檔案總管的app只是還沒開始使用這個api而已,等到其他app加了幾行code之後,使用者也允許之後,一切照理來說就會恢復正常但是,這個api我用起來有個小問題,就是如果你有兩個以上的sdcard時,app會不知道你給他的權限是哪個sdcard,可能是我功力不夠還沒找到解法,但目前有兩個以上的sdcard的手機也不多就是了,另外usb storage我也還沒找到解法至於DocumentUI是空的,跟上一段的發生原因差不多,我覺得Google給的api問題比較大,HTC需要做一些額外的處理才能解決,不過討論下去就扯遠了,我也不確定我的猜測是否正確P.S.系統本身自帶的檔案總管app都不受以上限制,因為他是system app,權限超級高
AKSN74 wrote:不過5.0也出來一段時間了說 Android 5.0出來這麼久了,我自己也是最近才發現,來談一下原因在不久前幾乎只有Nexus系列有Android 5.0,但大家可以注意到Nexus系列的手機幾乎沒有sdcard,所以開發者也許沒發現這個問題,而我是用Desire 816 cm12(Android 5.0)下去做測試,所以我有sdcard,但問題就在於cm系列的rom太好了,他把這個問題在開發rom的時候就解決掉,所有app都不需要跟使用者要求權限就可以讀寫sdcard,所以我才會這麼晚發現這個問題現在,大廠有sdcard的手機陸陸續續升級了,app的開發者應該也會開始注意到這個問題了,當然,很多優秀的開發者(例如ES的開發者)很早就解決了Google的想法是很有趣的,他其實不把sdcard當一回事,在他的文件中external storage指的是內建儲存空間的非系統使用部分,而sdcard在他的文件中則是secondary external storage的一部分(usb storage也算在內),所以Nexus手機一般不配sdcard插槽由此可窺知一二,Android 4.4會把sdcard搞成這樣也是可以理解...
我找到方法了剛用OTG接上2.5吋硬碟測試的時候,發現DocumentUI顯示的2.5吋硬碟名稱是用該磁區的volume label所以,想辦法讓電腦讀記憶卡(讀卡機一類的,手機MTP模式不行),然後填上volume label(分區名稱),再插回手機就能正常用DocumentUI選擇了從昨晚更新5.0到現在終於搞定了,哈哈哈