2017-10-30 8 views
1

IONIC의 "cordova-plugin-file"플러그인을 사용하여 안드로이드 장치에서 (이동식) SD 카드에 쓰기를 시도해 보았습니다.ionic externalRootDirectory SD 카드에 쓰기 실패

은 문서로

externalRootDirectory 

지정 "안드로이드 :. 외부 저장 장치 (SD 카드) 루트를" 그러나

, 나는이 디렉토리에 쓰기 :

this.file.resolveDirectoryUrl(this.file.externalRootDirectory) 
.then((data)=>{ 
    result += "\n" + "resolveDirectoryUrl"; 
    newBasePath = data.nativeURL; 
    this.file.createDir(newBasePath, newDirName, true) 
    .then(()=>{ 
    result += "\n" + "createDir"; 
    this.file.createFile(newBasePath, newFilePath, true) 
    .then(()=>{ 
     result += "\n" + "createFile"; 
     this.file.writeFile(newBasePath, newFilePath, this.thisRouteFile, {append:true}) 
     .then(() => { 
     result += "\n" + "writeFile OK"; 
     }); 
    }); 
    }); 
}); 

항상 내부 메모리 또는 에뮬레이션이 아닌 이동식 SD 카드에 기록됩니다 파일. 문제의 많은 논의가있다

, 일부는

<preference name="AndroidPersistentFileLocation" value="Compatibility" /> 

을 인용하지만 난 어떤 해결책을 발견했다.

이동식 SD 카드에 쓸 수 있습니까?

+0

현재 어떤 디렉토리 경로가 사용되고 있는지 알려주십시오. 또한 SD 카드에 어떤 경로가 사용되는지 알려줍니다. – greenapps

답변

2

TL : DR : cordova-diagnostic-plugingetExternalSdCardDetails() 기능을 사용하십시오.

cordova-plugin-file에 의해 반환 된 "외부 디렉터리"는 비 분리형 (내부) 저장소에 해당합니다. 이러한 에뮬레이트 된 위치는 항상 모든 안드로이드 장치에 존재하는 것이 보장되지만 외부/이동식 SD 카드 위치는 모든 하드웨어 공급 업체에서 지원하지 않으며 제조업체/안드로이드 버전에 따라 다르며 외부 SD 카드가 리더기에 삽입되어 있지 않습니다. 삼성 갤럭시 S4에 대한 예를 들어

는 안드로이드 7.1.1을 실행 :

  • cordova.file.externalRootDirectory 반환 file:///storage/emulated/0/
  • cordova.file.externalApplicationStorageDirectory 반환이 아닌 이동식 내부 저장소 filepaths 있습니다

file:///storage/emulated/0/Android/data/cordova.plugins.diagnostic.example/.

대조적으로 getExternalSdCardDetails()의 기능은 cordova-diagnostic-plugin에서 이동식 외부 SD 카드의 위치와 세부 정보를 반환합니다.삼성 갤럭시 S4 실행하는 Android에 예를 들어

, 그것은 반환 7.1.1 : 외부 이동식 저장에 filepaths 있습니다

[{ 
    "path": "/storage/4975-1401/Android/data/cordova.plugins.diagnostic.example/files", 
    "filePath": "file:///storage/4975-1401/Android/data/cordova.plugins.diagnostic.example/files", 
    "canWrite": true, 
    "freeSpace": 16254009344, 
    "type": "application" 
}, { 
    "path": "/storage/4975-1401", 
    "filePath": "file:///storage/4975-1401", 
    "canWrite": false, 
    "freeSpace": 16254009344, 
    "type": "root" 
}] 

합니다.

+0

완벽. 감사! – jcsubmit

1

외부 저장소에 대한 액세스 권한을 놓칠 수 있습니다.

cordova-plugin-file 플러그인은 android.permission.WRITE_EXTERNAL_STORAGE 권한을 요청하기 위해 AndroidManifest.xml에 줄을 추가하지만 새로운 Android 권한 확인 메커니즘으로는 충분하지 않습니다.

Android 6부터는 매니페스트에 넣지 않고 런타임에 사용 권한을 요청해야합니다.

이것은 특별한 권한이 필요한 기능을 호출 할 때마다 Android 기능을 호출하여 권한이 있는지 확인해야합니다.

Android-permissions plugin을 사용하면 런타임에 WRITE_EXTERNAL_STORAGE 권한을 요청할 수 있습니다.

+0

권한을 요청 해 주셔서 감사합니다. – jcsubmit