下載儲存檔案到手機本地前, 優先選擇位置的一個取巧方法

來源:互聯網
上載者:User

標籤:style   java   ar   for   檔案   問題   代碼   sp   on   

現在的手機記憶體動輒內建了8G, 16G, 甚至32G的儲存空間, 其實已經夠用了. 當然如果手機支援插外置記憶卡, 比如手機再插入個32G的記憶卡. 那手機容量就大大增加了. 應用在下載儲存檔案時, 比如像UC瀏覽器那種, 它會詢問誘導使用者佈建一個預設的儲存路徑. 一般我們會優先將檔案儲存在外置記憶卡中(如果有的話) , 若沒有外置儲存的記憶卡, 才把這些檔案圖片什麼的 放到內建儲存的空間去, 這樣才能最大限度的不浪費手機內建的儲存空間. 

於是, 我就有了以下的一個取巧方法, 思路大概是這樣的 : 下載檔案前, 先利用Environment去判斷是否有外置記憶卡, 如果有就將檔案儲存至外置記憶卡中(當然更謹慎的思路是, 還要計算出該記憶卡的剩餘空用空間, 如果大於檔案的大小 就進行儲存操作, 否則提示使用者記憶體不足BLABLABLA的. 後面同理, 我就不再提這點了.).  如果沒有記憶卡, 就儲存至本機存放區空間.  

但這裡有一個問題, 就是儲存至本機存放區空間時, 我們並不像儲存至外置儲存卡那麼方便, 直接用一個Environment.getExternalStorageDirectory().getAbsolutePath()就搞掂. 儲存至本地中還需要提前獲知這個路徑, 而這個路徑根據不同的手機有的是/mnt/sdcard1/ , 有的是/mnt/sdcard2/ 等等. So 怎麼取巧呢? 直接看代碼.

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//有記憶卡, 進行相應操作}else{File[] files = new File("/mnt/").listFiles();if(files.length > 0){String filePath = null;for(int p=0;p<files.length;p++){if(files[p].isDirectory()){if(files[p].getPath().indexOf("sdcard") > 0){//路徑名包含"sdcard"這個關鍵字StatFs st = new StatFs(files[p].getPath());int blocksize = st.getBlockSize();int blockcount = st.getBlockCount();if((blocksize * blockcount) > 0){filePath = files[p].getPath();}}}}if(filePath != null){//找出本機存放區的路徑, 進行相應操作}}}

上面的方法, 可以在進行儲存操作前, 先用來找出儲存的路徑. 主要是方便當不存在外置儲存卡時 , 分配給外置儲存的block數就為0,大小也當然為0. 於是能比較快的找出內建儲存(不為0)的路徑.當然, 假定了內建儲存的路徑名包含了"sdcard"這個關鍵字, 這是取巧的方法, 但也足以應對絕大多數的手機了.






下載儲存檔案到手機本地前, 優先選擇位置的一個取巧方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.