2013-02-14 3 views
4

일부 파일을 다운로드하고 장치에 저장하는 Phonegap/Cordova 앱을 만들고 있습니다. 이를 위해 File API를 사용합니다.Phonegap/Cordova 파일 API. 제거시 파일 제거

window.requestFileSystem(LocalFileSystem.PERSISTENT, 
    0, 
    function (fileSystem) { 
     rootPath = fileSystem.root.fullPath; 
    }, 
    fail 
); 

iOS의 경우 이것은 rootPath을 앱의 개인 디렉토리로 설정합니다. Android에서는 외부 저장소의 루트로 rootPath을 설정합니다. 이러한 파일은 응용 프로그램에 연결되지 않고 응용 프로그램이 삭제 될 때 제거되지 않으므로 약간 문제가됩니다. 내가 이해하는 한, 안드로이드에서 이것을하는 올바른 방법은 getExternalFilesDir을 사용하는 것입니다. Phonegap을 통해 getExternalFilesDir의 기능을 어떻게 얻을 수 있습니까?

답변

4

JS를 통해 외부 파일 디렉토리를 요청할 수 있습니다.

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, 
    function (fileSystem) { 
     fileSystem.root.getDirectory("Android/data/com.my.app/files", 
      {create: true, exclusive: false}, 
      function(dirEntry) { 
       rootPath = dirEntry.fullPath; 
      }, fail);; 
    }, 
    fail 
); 

이제 앱을 제거 할 때 정리할 영역을 가리키는 경로가 있습니다.

+0

고맙습니다. 그 말은 안드로이드와 아이폰 OS에서 다르게 해결해야한다는 뜻이다. 호기심에서 벗어난 것은 오래된 Android (SDK <8)를 지원했기 때문입니까 아니면이 동작에 대한 다른 이유가 있습니까? – Reason

+1

원래 파일 API를 만들었을 때 결정은 내부 드라이브의 저장 장치 부족으로 인해 외부 저장소를 사용하여 파일을 저장하는 것이 었습니다. 우리는 실제로/data/data/{package name} 디렉토리로 이동하여 iOS/BB와 더 잘 어울리는 것을 생각하고 있습니다. 나의 제안은 LocalFileSystem.APP를 만드는 것이다. LocalFileSystem.APP는 결국 변경에 익숙해지면 결국 PERSISTENT 상수가된다. –

+0

최근에 2.3에서 2.5로 변경되었습니다. 이제는/mnt/sdcard/대신 data/data/com.my.app /에 저장되는 것으로 보입니다. 이것은이 버전에서 문제가 해결되었다는 것을 의미합니까, 아니면 여전히 그것에 대해 걱정할 필요가 있습니까? – Reason

0

제거 이벤트를 추적 할 수 없습니다. 하지만 디렉토리를 지우려면 아래 코드를 따르십시오.

function deleteDirectory(directoyName){ 
    $scope.fs.root.getDirectory(directoyName,{ create: false, exclusive: false }, function(dirEntry) { 
     dirEntry.removeRecursively(function() { 
     console.log('Directory Successfully Removed.'); 
     }, errorHandler); 
    }, errorHandler); 
    }