2016-10-04 9 views
0

getExternalStorageDirectory() return 휴대 전화의 SD 카드 경로. (화웨이 Y320 - android 4.2.2).android 모든 기기의 모든 외부 저장 경로를 가져옵니다.

이제 경로를 얻는 방법 휴대 전화 저장소 모든 기기 및 모든 API 경로? 아래 스크린 샷에서 약탈.

enter image description here

+1

이동식 SD 카드의 경로를 결정하기 위해 더 신뢰할 수있는 방법이 없습니다. 장치마다 다르며 때로는 불가능합니다. 위의 경우 getExternalFilesDirs()를 사용해보십시오. 그것은 두 가지 경로를 줄 것입니다. 두 번째 카드에 있습니다. – greenapps

+1

By 덧붙여서 : 당신은 그림이 틀립니다. getExternalStorageDirectory는 'SD 카드'가 아니라 '전화 저장 공간'을 제공합니다. – greenapps

+1

그래서 나는 처음부터 틀린 글을 읽었다는 것을 알고 있습니다. 대부분의 질문이 SD 카드의 경로를 얻는 방법 인 것처럼 혼란 스러웠습니다. 하지만 당신이 말하는 것은 불가능합니다. 'getExternalStorageDirectory()'는'Phone storage' 경로를 전달합니다. 흔히'/ storage/emulated/0' 또는'/ mnt/sdcard' 또는'/ sdcard'입니다. 당신이 얻는 것을 말하십시오. – greenapps

답변

1

나는이 방법을 사용하고 있습니다 : 안드로이드 5.0 아래

public static final String SD_CARD = "sdCard"; 
    public static final String EXTERNAL_SD_CARD = "externalSdCard"; 
    private static final String ENV_SECONDARY_STORAGE = "SECONDARY_STORAGE"; 

    public static Map<String, File> getAllStorageLocations() { 
     Map<String, File> storageLocations = new HashMap<>(10); 
     File sdCard = Environment.getExternalStorageDirectory(); 
     storageLocations.put(SD_CARD, sdCard); 
     final String rawSecondaryStorage = System.getenv(ENV_SECONDARY_STORAGE); 
     if (!TextUtils.isEmpty(rawSecondaryStorage)) { 
      String[] externalCards = rawSecondaryStorage.split(":"); 
      for (int i = 0; i < externalCards.length; i++) { 
       String path = externalCards[i]; 
       storageLocations.put(EXTERNAL_SD_CARD + String.format(i == 0 ? "" : "_%d", i), new File(path)); 
      } 
     } 
     return storageLocations; 
    } 
+0

이 방법은 모든 기기 및 API에서 수정 되었습니까? (삼성, 소니, 화웨이 등 ...) ?? – grizzly

+0

예, 괜찮습니다. –

+0

'sdCard' 및'externalSdCard'와'SECONDARY_STORAGE' 이름은 모든 devies에서 고정되고 일정합니까? 예 :'sdCard' 문자열은 화웨이 삼성 소니에서 고쳤습니까? 아니면 다른 예제 인'sd_card'? – grizzly

1

외부 디렉토리는 더 나은 미디어/공유 스토리지로 생각 될 수있다. 상대적으로 많은 양의 데이터를 저장할 수있는 파일 시스템이며 모든 응용 프로그램에서 공유됩니다 (사용 권한을 강제하지 않습니다). 전통적으로이 카드는 SD 카드이지만 보호 된 내부 저장소와 구별되며 컴퓨터에 파일 시스템으로 마운트 할 수있는 장치에 기본 제공 저장소로 구현 될 수도 있습니다.

Environment.getDataDirectory() 

권장 ... 당신이 사용자 데이터 디렉토리의 경우 읽기 : Android External Storage

건배!

+0

in my screenshot ** 전화 보관 **은 외부 또는 내부입니까? (나는 unistall app 후에 파일을 제거하고 싶지 않다 !!!) – grizzly

+1

@ grizzly, 그게 달려있다. 일부 안드로이드 장치에서는 휴대 전화 저장 장치가 유일한 저장 장치이며 외부 장치 (8GB 이상의 내부 저장 장치가있는 장치)로 작동하는 SD 카드 (외부 저장소)를 삽입 할 수 없습니다. 외부 저장소가 있는지 여부를 구별하기위한 코드와 만약 그렇다면 무엇을 할 것인지, 어떤 경로를 취할 것인가 ... –

+0

오케이, 귀하의 의견으로는 @Fedor Kazakov 대답은 사실이며 모든 장치를 수정합니까? – grizzly