Android 4.4 kitkat SD卡下載地址的處理

最近工作遇到一個(gè)問(wèn)題,學(xué)員想把下載的視頻放到外置的SD卡上,所以領(lǐng)導(dǎo)要求開(kāi)發(fā)一個(gè)這樣的功能。因?yàn)闅v史的原因,android手機(jī)是可以安裝外置的存儲(chǔ)卡,用來(lái)分擔(dān)內(nèi)置存儲(chǔ)卡放不下的東西,比如下載個(gè)視頻、下載個(gè)音樂(lè)什么的,但是從android4.4(Kitkat)之后,谷歌可能覺(jué)得應(yīng)用直接操作sd卡會(huì)讓sd卡的文件太混亂了,所以應(yīng)用不能直接操作sd卡了,那應(yīng)用大的數(shù)據(jù)(優(yōu)酷下個(gè)視頻,網(wǎng)易下個(gè)音樂(lè))怎么存儲(chǔ)在sd卡中呢。what,這個(gè)問(wèn)題糾結(jié)了好久,因?yàn)橹皼](méi)有了解過(guò)這方面,當(dāng)時(shí)開(kāi)發(fā)也不知道android已經(jīng)不讓?xiě)?yīng)用操作sd卡了,所以就一直在想怎么才能突破這個(gè)限制,一直就在突破方面想辦法,后來(lái)就想看看ES文件管理器怎么操作sd卡的,我想它能操作,我為啥不能操作,就找怎么操作SD卡的方法,還別說(shuō)真讓我找到了,我看它會(huì)有一個(gè)頁(yè)面提示,然后選擇sd卡,就可以操作了。大概就是這樣的
image.png

,當(dāng)發(fā)現(xiàn)別人好的代碼,我們?cè)撛趺崔k呢,答案就是-----逆向工程,基于學(xué)習(xí)的目的,我反編譯了Es的代碼然后看它實(shí)現(xiàn)步驟:

1.如果發(fā)現(xiàn)有sd卡的地址,又發(fā)現(xiàn)寫(xiě)文件失敗那就彈出這么個(gè)頁(yè)面,引導(dǎo)用戶進(jìn)行這樣的選擇操作
2.獲取到sd卡的uri路徑
3.startActivityForResult(new Intent("android.intent.action.OPEN_DOCUMENT_TREE",code));
4.處理返回的uri

@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
switch (requestCode) {  
    case code:  
        if (resultCode == RESULT_OK) {  
            Uri treeUri = data.getData();  
            if (!":".equals(treeUri.getPath().substring(treeUri.getPath().length() - 1)) || treeUri.getPath().contains("primary")) {  
                //這里繼續(xù)彈出彈窗來(lái)提示用戶獲取uri  
            } else {  
                Log.d(TAG,"onActivityResult"+succeed);  
                PageExtra.setSdUri(treeUri.toString());   
            }  
        }  
    }  
super.onActivityResult(requestCode, resultCode, data);  
}
5.現(xiàn)在其實(shí)已經(jīng)可以操作SD卡了

我也找到了別人的博客,他寫(xiě)的比較詳細(xì),因?yàn)槲易詈笠膊⒉皇且僮魉械膕d卡,所以我也沒(méi)有深入的學(xué)習(xí)。這時(shí)候我很高興呀,終于找到了辦法,任務(wù)完成了一半了,剩下的就是把下載地址放進(jìn)去就ok了,然后一看xUtil,它不支持使用uri下載,而我如果自己要把xUtil的下載改一下應(yīng)該不只是兩天了,我這是覺(jué)得路走錯(cuò)了,繼續(xù)找別的路走一下。

百度找不多就去google看一下,沒(méi)想到一找就找到兩篇一起的博客,一下我就懂了,現(xiàn)在把路徑給大家,免的大家走彎路,這個(gè)是說(shuō)4.4的,這個(gè)是說(shuō)操作整個(gè)sd卡的。這時(shí)候我才知道了,android系統(tǒng)是不讓操作整個(gè)sd卡,但是應(yīng)用可以單獨(dú)操作sdCard/Android/data/應(yīng)用/xxx目錄的,那其實(shí)問(wèn)題已經(jīng)很清楚了,就是以后只能放在外置sd卡下的固定目錄,如果刪除應(yīng)用目錄也會(huì)被刪除,用戶就不用擔(dān)心應(yīng)用殘留數(shù)據(jù)了,這個(gè)應(yīng)該是和iphone一樣的思路。到這里其實(shí)我以為我已經(jīng)搞定了,但是我沒(méi)想一個(gè)很重要的問(wèn)題,就是andorid系統(tǒng)的多廠商,當(dāng)我寫(xiě)完代碼一測(cè),nnd,獲取的sd卡路徑不正確,而且感覺(jué)官方的文檔沒(méi)有固定獲取內(nèi)外置sd卡的固定方法,我又找了一下資料,發(fā)現(xiàn)一個(gè)比較好用的,是通過(guò)反射來(lái)獲取的sd卡路徑就是第二種方法。大部分的設(shè)備都是可以獲取到正確的路徑,但是嘗試魅族 pro5時(shí)候不能下載,我覺(jué)的應(yīng)該是路徑獲取錯(cuò)了,因?yàn)槭莿e人的手機(jī)我也沒(méi)有太多的測(cè)試,如果大家有好的獲取sd卡路徑的方法歡迎留言,共同進(jìn)步。

歡迎大家關(guān)注我的簡(jiǎn)書(shū)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,355評(píng)論 25 708
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評(píng)論 19 139
  • 《ilua》速成開(kāi)發(fā)手冊(cè)3.0 官方用戶交流:iApp開(kāi)發(fā)交流(1) 239547050iApp開(kāi)發(fā)交流(2) 1...
    葉染柒丶閱讀 11,586評(píng)論 0 11
  • 《ijs》速成開(kāi)發(fā)手冊(cè)3.0 官方用戶交流:iApp開(kāi)發(fā)交流(1) 239547050iApp開(kāi)發(fā)交流(2) 10...
    葉染柒丶閱讀 5,685評(píng)論 0 7
  • 如果你忍不住對(duì)孩子發(fā)火,就讀一讀:《牽一只蝸牛去散步》 上帝給我一個(gè)任務(wù) 叫我牽一只蝸牛去散步。 我不能走太快, ...
    好寶媽閱讀 206評(píng)論 0 0

友情鏈接更多精彩內(nèi)容