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

最近工作遇到一個問題,學員想把下載的視頻放到外置的SD卡上,所以領導要求開發一個這樣的功能。因為歷史的原因,android手機是可以安裝外置的存儲卡,用來分擔內置存儲卡放不下的東西,比如下載個視頻、下載個音樂什么的,但是從android4.4(Kitkat)之后,谷歌可能覺得應用直接操作sd卡會讓sd卡的文件太混亂了,所以應用不能直接操作sd卡了,那應用大的數據(優酷下個視頻,網易下個音樂)怎么存儲在sd卡中呢。what,這個問題糾結了好久,因為之前沒有了解過這方面,當時開發也不知道android已經不讓應用操作sd卡了,所以就一直在想怎么才能突破這個限制,一直就在突破方面想辦法,后來就想看看ES文件管理器怎么操作sd卡的,我想它能操作,我為啥不能操作,就找怎么操作SD卡的方法,還別說真讓我找到了,我看它會有一個頁面提示,然后選擇sd卡,就可以操作了。大概就是這樣的
image.png

,當發現別人好的代碼,我們該怎么辦呢,答案就是-----逆向工程,基于學習的目的,我反編譯了Es的代碼然后看它實現步驟:

1.如果發現有sd卡的地址,又發現寫文件失敗那就彈出這么個頁面,引導用戶進行這樣的選擇操作
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")) {  
                //這里繼續彈出彈窗來提示用戶獲取uri  
            } else {  
                Log.d(TAG,"onActivityResult"+succeed);  
                PageExtra.setSdUri(treeUri.toString());   
            }  
        }  
    }  
super.onActivityResult(requestCode, resultCode, data);  
}
5.現在其實已經可以操作SD卡了

我也找到了別人的博客,他寫的比較詳細,因為我最后也并不是要操作所有的sd卡,所以我也沒有深入的學習。這時候我很高興呀,終于找到了辦法,任務完成了一半了,剩下的就是把下載地址放進去就ok了,然后一看xUtil,它不支持使用uri下載,而我如果自己要把xUtil的下載改一下應該不只是兩天了,我這是覺得路走錯了,繼續找別的路走一下。

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

歡迎大家關注我的簡書

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,117評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,881評論 18 139
  • 《ilua》速成開發手冊3.0 官方用戶交流:iApp開發交流(1) 239547050iApp開發交流(2) 1...
    葉染柒丶閱讀 10,918評論 0 11
  • 《ijs》速成開發手冊3.0 官方用戶交流:iApp開發交流(1) 239547050iApp開發交流(2) 10...
    葉染柒丶閱讀 5,300評論 0 7
  • 如果你忍不住對孩子發火,就讀一讀:《牽一只蝸牛去散步》 上帝給我一個任務 叫我牽一只蝸牛去散步。 我不能走太快, ...
    好寶媽閱讀 187評論 0 0