2013年7月1日

【Android】ImageView讀取SDCard圖片(Image From SD Card)

各位Android安卓開發者大家安安大家好 ^^

小黑人今天要與大家分享的是"讀取SDCard圖片",因為SDCard的儲存空間可以存入很多的檔案,例如相片、音樂...等各類型檔案,那如果要將SDCard內的相片圖片放入APP裡顯示的話要如何讀取呢?這就是小黑人今天要與大家分享簡單快速的讀取SDCard相片圖片方法,就讓我們繼續看下去吧。

1.讀取SDCard內的相片圖片只需要在程式裡(.java)撰寫即可。
public class MainActivity extends Activity
{
   private ImageView img;
   private Button btn;
       
   @Override
   protected void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
       
      //顯示SDCard圖片的ImageView與進行讀取SDCard圖片的Button
      img = (ImageView) findViewById(R.id.img);
      btn = (Button) findViewById(R.id.sd);

      btn.setOnClickListener(new OnClickListener()
      {
         @Override
         public void onClick(View arg0)
         {
            //確認是否有插入SDCard
            if(checkSDCard())
            {
               //帶入SDCard內的圖片路徑(SDCard: DCIM資料夾/100MEDIA資料夾/001圖片)
               img.setImageBitmap(getBitmapFromSDCard("DCIM/100MEDIA/001.jpg"));
            }
            else Toast.makeText(MainActivity.this,
                                "尚未插入SDCard",
                                Toast.LENGTH_SHORT).show();
         }
      });
   }
       
   //確認是否有插入SDCard
   private static boolean checkSDCard()
   {           
      if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
      {              
         return true;           
      }            
      return false;        
   }
       
   //讀取SDCard圖片,型態為Bitmap
   private static Bitmap getBitmapFromSDCard(String file)
   {
      try 
      {
         String sd = Environment.getExternalStorageDirectory().toString();
         Bitmap bitmap = BitmapFactory.decodeFile(sd + "/" + file);
         return bitmap;
      } 
      catch (Exception e) 
      { 
         e.printStackTrace(); 
         return null; 
      } 
   }
}
畫面預覽 :
以上就是讀取並顯示SDCard內相片圖片的實作程式碼,大家可以參考看看唷 ^^
如有任何問題都可以和小黑人一起交流討論喔~謝謝大家~! XDD

9 則留言:

  1. 如果沒有直接指定『照片(001.jpg)』,
    以變數(filename)來呈現,
    並結合正確圖片路徑("/sdcard/DCIM/100MEDIA/"+filename),
    這樣該如何正確顯示圖片出來呢?

    回覆刪除
    回覆
    1. 您好,很抱歉這麼久才回覆您!
      哈哈,小黑人這段時間忙著處理專題研究,真不好意思...
      根據您的提問小黑人向您解釋,
      直接指定的目的為很明確知道要顯示哪一張圖片的作法,
      如果圖片名稱為變數的話,就如同您的做法一樣,
      宣告變數 : String filename = "001.jpg";
      圖片路徑 : "/sdcard/DCIM/100MEDIA/" + filename ;
      filename變數可以隨時更變圖片名稱來進行換圖,
      filename = "002.jpg" or filename = "003.png"

      感謝您的提問! ^^

      刪除
  2. 如果現在要要讀取檔案
    但是不知道他是存在內部還是SD卡的話
    這樣要怎辦?

    回覆刪除
    回覆
    1. 您好,根據您的提問小黑人向您解釋,
      如果不知道檔案目錄的話,其實可以先用File確認檔案是否存在,
      例如: File mFile = new File("檔案路徑"); (先假設是否在SD卡裡做判斷)
      mFile.exists() 如果為true的話就代表檔案在SD卡裡,為false就代表在內部或其他地方。

      感謝您的提問。 ^^

      刪除
  3. 您好:
    想請教您一個問題,我用來開發的手機是SONY 的 EXPERIA-V,我一開始也是先判斷手機是否有安裝SD卡
    Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED).奇怪的是不論我有沒有裝SD卡他竟然都給我回來true..
    後來我去看了一下他所抓的路徑Environment.getExternalStorageState(),回應的是/storage/sdcard0,可是我的手機記憶卡位置是在/storage/sdcard1呢...請問怎麼會這樣呢..百思不解阿><...
    謝謝大大耐心看完...

    回覆刪除
    回覆
    1. 您好,很抱歉這麼久才回覆您,
      根據您的問題小黑人覺得應該是手機本身就有一個內建儲存空間(sdcard0),
      但是手機還可以讓使用者再擴增SD-Card,所以就成了另一個儲存空間(sdcard1),
      所以不管您有沒有插入SD-Card都有內建本身的儲存空間存在,就都會回傳true,
      感謝您的留言!

      刪除
  4. 您好,很抱歉這麼久才回覆您,
    根據您的問題小黑人覺得應該是手機本身就有一個內建儲存空間(sdcard0),
    但是手機還可以讓使用者再擴增SD-Card,所以就成了另一個儲存空間(sdcard1),
    所以不管您有沒有插入SD-Card都有內建本身的儲存空間存在,就都會回傳true,
    感謝您的留言!

    回覆刪除
  5. 作者已經移除這則留言。

    回覆刪除
  6. 您好
    請問如果我要從SD卡路徑取得excel檔的資料
    您認為還需要增加甚麼方法取得我要的資料?
    感謝解答!!

    回覆刪除

謝謝大家支持,有任何問題都可以和小黑人一起討論!