Android SD 카드 경로 문제 및 SD 카드 메모리 가 져 오 는 방법

원문:http://www.linuxidc.com/Linux/2011-02/32603.htm
사진 을 찍 은 후 돌파 하 는 저장 경 로 를 연구 할 때 저장 경 로 를 private String folder = "/ sdcard / DCIM / camera /" (SD 카드 에서 사진 을 찍 는 프로그램의 그림 저장 경로) 로 쓰기 시작 합 니 다.나중에 이렇게 쓰 는 것 이 보통 틀 리 지 는 않 지만 좋 지 않다 는 것 을 알 게 되 었 다. 카메라 에 따라 경로 에 문제 가 생 길 수 있 기 때문이다.좋 은 방법 은 Environment 를 통 해 경 로 를 가 져 오 는 것 입 니 다. 마지막 으로 예 를 들 어 SDCard 의 메모 리 를 어떻게 가 져 오 는 지 알려 드 립 니 다.서술 한 내용 은 다음 과 같다.
0. sd 카드 경 로 를 가 져 옵 니 다. 
1. Environment 류 에 대해 이야기 합 니 다. 
2. StatFs 류 를 설명 합 니 다. 
3. 전체 예 에서 SDCard 메모리 읽 기
0 、 sd 카드 획득 경로  방법 1: private String folder = "/ sdcard / DCIM / camera /" (SD 카드 에 있 는 사진 프로그램의 그림 저장 경로); / /절대 옳 은 길 을 쓰 고, 사용 에 찬성 하지 않 는 다.
방법 2:  public String getSDPath(){         File sdDir = null;         boolean sdCardExist = Environment.getExternalStorageState()                               .equals(Android.os.Environment.MEDIA_MOUNTED);   //sd 카드 존재 여부 판단         if   (sdCardExist)           {                                         sdDir = Environment. getExternalStorageDirectory (); / 가 져 오기 및 디 렉 터 리        }           return sdDir.toString();          }
다음: 뒤에 슬 래 쉬 를 붙 이 고 파일 이름 을 붙 입 니 다.  String fileName = getSDPath () + "/" + name; / 이름 으로 디 렉 터 리 에 존재 합 니 다.
1, 설명 환경 클래스  Environment 는 접근 환경 변 수 를 제공 하 는 클래스 입 니 다.  Environment 포함 상수:  MEDIA_BAD_REMOVAL  설명: getExternalStorageState () 로 돌아 가 SD 카드 가 마 운 트 해제 되 기 전에 제거 되 었 음 을 표시 합 니 다.  MEDIA_CHECKING  설명: getExternalStorageState () 를 되 돌려 대상 이 디스크 검 사 를 하고 있 음 을 표시 합 니 다.  MEDIA_MOUNTED  설명: getExternalStorageState () 를 되 돌려 대상 이 존재 하고 읽 기 / 쓰기 권한 이 있 는 지 표시 합 니 다.  MEDIA_MOUNTED_READ_ONLY  설명: getExternalStorageState () 로 돌아 가 대상 권한 을 읽 기 전용 으로 표시 합 니 다.  MEDIA_NOFS  설명: getExternalStorageState () 로 돌아 가 대상 이 공백 이거 나 지원 되 지 않 는 파일 시스템 을 사용 하고 있 음 을 표시 합 니 다.  MEDIA_REMOVED  설명: getExternalStorageState () 를 되 돌려 줍 니 다. SD 카드 가 존재 하지 않 으 면 되 돌려 줍 니 다.  MEDIA_SHARED  설명: getExternalStorageState () 를 되 돌려 줍 니 다. SD 카드 가 설치 되 어 있 지 않 으 면 USB 대 용량 저장 소 를 통 해 공유 하여 되 돌려 줍 니 다.  MEDIA_UNMOUNTABLE  설명: getExternalStorageState () 로 돌아 가 SDCard 로 돌아 가면 설치 할 수 없습니다. SDCard 가 존재 하지만 설치 할 수 없습니다.  MEDIA_UNMOUNTED  설명: getExternalStorageState () 로 돌아 가 SDCard 가 지 워 졌 다 면   존재 하지만 설치 되 지 않 았 습 니 다.  Environment 상용 방법:  방법: getDataDirectory ()  설명: 파일 되 돌리 기, 가 져 오기 Android 데이터 디 렉 터 리.  방법: getDownloadCacheDirectory ()  설명: 파일 되 돌리 기, 가 져 오기 Android 내용 디 렉 터 리 를 다운로드 / 캐 시 합 니 다.  방법: getExternalStorageDirectory ()  설명: File 을 되 돌려 주 고 외부 저장 디 렉 터 리 즉 SDCard 를 가 져 옵 니 다.  방법: getExternalStoragePublicDirectory (String type)  설명: File 로 돌아 가 고 급 스 러 운 공용 외부 메모리 디 렉 터 리 를 가 져 와 서 특정한 유형의 파일 을 배치 합 니 다.  방법: getExternalStorageState ()  설명: File 을 되 돌려 외부 저장 장치 의 현재 상 태 를 가 져 옵 니 다.  방법: getRootDirectory ()  설명: 파일 되 돌리 기, 가 져 오기 Android 루트 디 렉 터 리  2. StatFs 클래스 설명  StatFs 는 Liux 의 df 명령 을 모 의 하 는 클래스 로 SD 카드 와 핸드폰 메모리 의 사용 상황 을 얻 었 습 니 다.  StatFs 상용 방법:  getAvailableBlocks()  설명: Int 로 돌아 가 현재 사용 가능 한 저장 공간 가 져 오기  getBlockCount()  설명: Int 로 돌아 가 이 지역 에서 사용 할 수 있 는 파일 시스템 수 를 가 져 옵 니 다.  getBlockSize()  설명: Int, 크기, 바이트 단위, 파일 시스템 을 되 돌려 줍 니 다.  getFreeBlocks()  설명: Int 로 돌아 갑 니 다. 이 블록 에 남 은 공간 입 니 다.  restat(String path)  설명: 이 대상 이 인용 한 파일 시스템 을 실행 합 니 다.
3. 전체 예 에서 SDCard 메모리 읽 기  메모리 카드 Android 휴대 전 화 는 수시로 꽂 을 수 있 습 니 다. 매번 동작 은 운영 체 제 를 일 으 키 는 ACTION BROADCAST 를 진행 합 니 다. 이 예 는 위 에서 배 운 방법 을 사용 하여 SDCard 의 남 은 용량 과 총 용량 을 계산 합 니 다. 코드 는 다음 과 같 습 니 다.
package com.terry;
import java.io.File; 
import java.text.DecimalFormat;

import Android.R.integer; 
import Android.app.Activity; 
import Android.os.Bundle; 
import Android.os.Environment; 
import Android.os.StatFs; 
import Android.view.View; 
import Android.view.View.OnClickListener; 
import Android.widget.Button; 
import Android.widget.ProgressBar; 
import Android.widget.TextView; 
import Android.widget.Toast;
public 
class getStorageActivity extends Activity { 
private Button myButton; 
/** Called when the activity is first created. */ 
@Override 
public 
void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
       setContentView(R.layout.main); 
       findView(); 
       viewHolder.myButton.setOnClickListener(new OnClickListener() { 
         
         @Override 
         public 
void onClick(View arg0) { 
            // TODO Auto-generated method stub 
            getSize(); 
         } 
       }); 
}

void findView(){ 
       viewHolder.myButton=(Button)findViewById(R.id.Button01); 
       viewHolder.myBar=(ProgressBar)findViewById(R.id.myProgressBar); 
       viewHolder.myTextView=(TextView)findViewById(R.id.myTextView); 
}
 
void getSize(){ 
       viewHolder.myTextView.setText(""); 
       viewHolder.myBar.setProgress(0); 
      //          
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ 
         File path =Environment.getExternalStorageDirectory(); 
         //  sdcard     
         StatFs statfs=new StatFs(path.getPath()); 
         //  block SIZE
long blocSize=statfs.getBlockSize(); 
         //  BLOCK  
long totalBlocks=statfs.getBlockCount(); 
         //    Block   
long availaBlock=statfs.getAvailableBlocks(); 
         
         String[] total=filesize(totalBlocks*blocSize); 
         String[] availale=filesize(availaBlock*blocSize); 
         //         
int maxValue=Integer.parseInt(availale[0]) 
         *viewHolder.myBar.getMax()/Integer.parseInt(total[0]); 
         viewHolder.myBar.setProgress(maxValue); 
         String Text="  :"+total[0]+total[1]+"
" +" :"+availale[0]+availale[1]; viewHolder.myTextView.setText(Text); }else if(Environment.getExternalStorageState().equals(Environment.MEDIA_REMOVED)){ Toast.makeText(getStorageActivity.this, " sdCard", 1000).show(); } } // , 1 , 2 KB/MB String[] filesize(long size){ String str=""; if(size>=1024){ str="KB"; size/=1024; if(size>=1024){ str="MB"; size/=1024; } } DecimalFormat formatter=new DecimalFormat(); formatter.setGroupingSize(3); String result[] =new String[2]; result[0]=formatter.format(size); result[1]=str; return result; } }

좋은 웹페이지 즐겨찾기