2011-08-16 4 views
4

문제가 있습니다. 16GB의 내부 저장소와 2GB의 SD 카드 카드가 함께 제공되는 은하 탭이 있습니다.android : sd-card가 있는지 확인하십시오.

environment.getExternalStorageState를 사용하면 마운트 된 값을 반환합니다. 그러나 내 은하 탭에서 SD 카드를 제거하면 내부 저장소를 외부 저장소로 간주하기 때문에 탑재 된 상태로 돌아갑니다. 실제 SD 카드와 내부 저장소를 구별 할 수있는 방법이 있습니까?

감사합니다.

답변

2

현재로서는 공개 API가없는 것 같습니다. /proc/mounts을 보면 확인할 수 있지만 모든 장치가 같은 위치에 보조 외부 저장소 (SD 카드)를 탑재하지는 않으므로 코드가 장치 종속적입니다.

+0

anyother 솔루션? – Farhan

+0

해결책이 있어야합니다. 내 장치 설정과 SD 카드 옵션으로 갈 때 실제 sd 카드와 내부 저장소를 확실히 구분할 수 있기 때문입니다. 그래서, 그것을 찾을 수있는 방법이 있어야한다는 것을 의미합니다 .. 어떤 도움? – Farhan

+0

나는 해결책이 없다고 말하지 않았다. 단지이를위한 공개 API가 없다. 앞서 말했듯이,'/ proc/mounts'를 분석하여 현재 어떤 장치가 마운트되어 있는지 확인합니다. –

1

sd 카드의 마운트 경로를 결정할 수 있으며 시스템과 관련이없는 경우 아마 외부 미디어입니다. 여기에이 링크를 체크 아웃하십시오 :

Find an external SD card location

-2

나는

if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
{ 

    Log.i("tag", "SDCard is mounted"); 

    } 

또는 this example 당신에게 내가 /storage/sdcard0/ 생각

+2

두 경우 모두 (내가 SD 카드를 제거하거나 삽입 할 때) 동일한 결과를 얻고 있습니다 .. 그게 나를 위해 일하지 않습니다 .. – Farhan

0

도움이 될 내부의 sdcard 및 /storage/sdcard1/에 사용되는이 외부에 사용되는 같은 시도 SD 카드에 두 개의 저장 옵션이있는 경우 파일이 sdcard에 존재하는지 확인 중이거나 가능한 모든 경로를 확인해야합니다.

String path;  
if(new File("/mnt/sdcard/yourpath").exists()) { 
    path="/storage/sdcard/yourpath"; 
} else if(new File("/storage/sdcard0/yourpath").exists()) { 
    path="/storage/sdcard0/yourpath"; 
} else if(new File("/storage/sdcard1/yourpath").exists()) { 
    path="/storage/sdcard1/yourpath"; 
} 
+0

이것은 사실이 아닙니다. 보조 저장 장치는 장치에 따라 파일 시스템의 여러 위치에 마운트 될 수 있습니다. 이것은 액세스에있어서 주요한 문제입니다. 통일은 없습니다. 내가 생각할 수있는 유일한 방법은/proc/mounts를 읽고, 긍정적으로 생각하고, 손가락을 횡단하여 SD 카드인지 추측 해보는 것입니다. – lenrok258

0

나는 내 자신의 수표를 만들었고 작동합니다. 2 차적인 실제 SD 카드가 있는지 확인합니다. Samsung Galaxy s5 neo, Alcatel 원터치 5020x 및 HTC One X에서 테스트했습니다. 코드는 앱 기본 디렉토리를 사용하여 확인하므로 KITKAT 장치에서 작동해야합니다.

기본 저장소에 기본 app 경로 저장소 문자열을 만듭니다. 그런 다음 "기본"을 "보조"로 변경 한 다음 폴더를 만들고 존재 여부를 확인하십시오.

을 Heres 코드 :

String primaryStorage = Environment.getExternalStorageDirectory().getAbsolutePath(); 
String secondaryStorage = System.getenv("SECONDARY_STORAGE"); 
Boolean hasSecondary = false; 

String internalSD = getExternalFilesDir(null) + "/test"; 
String externalSD = internalSD.replace(primaryStorage, secondaryStorage); 

      try{ 
       File dir = new File(externalSD); 
       dir.mkdirs(); 

       if (dir.isDirectory()) { 
        dir.delete(); 
        hasSecondary = true; 
       }     
      } catch (Exception e) { 
      } 
관련 문제