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卡路徑的方法歡迎留言,共同進步。
歡迎大家關注我的簡書。