
,當(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ū)。