以前的Android(4.1之前的版本)中,SDcard路徑通過“/sdcard”或者“/mnt/sdcard”來表示,而在JellyBean(安卓4.1)系統中修改為了" /storage/sdcard0",還會有多個SDcard的情況。目前為了保持和之前代碼的相容,SDcard路徑做了Link映 ...
以前的Android(4.1之前的版本)中,SDcard路徑通過“/sdcard”或者“/mnt/sdcard”來表示,而在JellyBean(安卓4.1)系統中修改為了" /storage/sdcard0",還會有多個SDcard的情況。目前為了保持和之前代碼的相容,SDcard路徑做了Link映射。為了使代碼更加健壯並能相容以後的Android版本和新設備,安卓4,1後sdcard中會有系統自動生成的保存特定內容的的文件目錄,從而可以使用一些特定函數來獲取對應目錄。
今天我們就簡單介紹幾種訪問SDcard路徑的幾種方式:
本次演示獲取的圖片路徑如下:
完整路徑為“/storage/emulated/0/Download/tianxingjiuge.jpg”
下麵我們通過將本機“/storage/emulated/0/Download/tianxingjiuge.jpg”圖片載入到APP中ImageView的演示來介紹這幾種載入方式:
佈局文件上方為一個Button,下方為imagView,不做過多闡述了,java實現代碼如下:
1 public class MainActivity extends AppCompatActivity { 2 ImageView iv; 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 iv= (ImageView) findViewById(R.id.iv); 8 } 9 public void load(View view){ 10 //第一種:直接引用全部的目錄(4.1之前使用,之後不建議這樣用) 11 // Bitmap bm = BitmapFactory.decodeFile("/storage/emulated/0/Download/tianxingjiuge.jpg"); 12 //第二種:/storage/emulated/0這一段的路徑可以用Environment.getExternalStorageDirectory() 13 // Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + 14 // "/Download/tianxingjiuge.jpg"); 15 //第三種:使用Environment.getExternalStoragePublicDirectory(String type)函數調用不同類型的文件目錄 16 Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStoragePublicDirectory 17 (Environment.DIRECTORY_DOWNLOADS) + "/tianxingjiuge.jpg"); 18 iv.setImageBitmap(bm); 19 } 20 }
第三種方式中使用Environment.getExternalStoragePublicDirectory(String type)函數,該函數可以返回特定類型的目錄,目前支持如下類型:
1 • DIRECTORY_ALARMS //警報鈴聲 2 • DIRECTORY_DCIM //相機拍攝的圖片和視頻 3 • DIRECTORY_DOWNLOADS //下載文件保存 4 • DIRECTORY_MOVIES //電影的保存,比如通過google play下載的電影 5 • DIRECTORY_MUSIC //音樂保存 6 • DIRECTORY_NOTIFICATIONS //通知音樂保存 7 • DIRECTORY_PICTURES //下載的圖片 8 • DIRECTORY_PODCASTS //用於保存podcast(博客)的音頻文件 9 • DIRECTORY_RINGTONES //保存鈴聲
本次圖片保存在Download目錄下,所以使用Environment.DIRECTORY_DOWNLOADS。