2017-09-06 5 views
6

Ionic v1$cordovaFilecordova email plugin을 사용하여 파일을 만든 다음 새 이메일에 첨부합니다. 모든 기기에서 iOS 용으로 사용할 수있는 솔루션이 있지만 Android와 관련된 이상한 문제가 발생했습니다. 안드로이드 (DataDirectory를, 등)에 내부 저장 위치에서 만든 파일을 첨부하려고 할 때이오니아 안드로이드 내부 공유 메모리

Android File System Layout

, 나는 "첨부 파일에 대한 거부 권한을"받을 수 있습니다. 그러나 파일을 외부 저장소에 저장하면 첨부 파일이 성공적으로 추가됩니다.

Android 용 외부 저장소를 사용하여 애플리케이션을 게시했지만 불행히도 오늘날 인기있는 일부 기기에는 외부 저장소가 없습니다.

해결책을 아는 사람이 있습니까? 파일 호스팅 서비스에 파일을 업로드하고 전자 메일에 다운로드 링크를 포함시키는 등의 해결 방법을 고려했습니다. $cordovaFileTransfer을 사용 하겠지만 내부 저장소에 사용 권한 오류가 있는지 여부는 알 수 없습니다. 가능하다면 이메일 첨부 파일을 사용하고 싶습니다. 감사!

+0

시도를 보낼 수 있습니다 '파일을 사용합니다. 이메일을 생성하고 보내는 방법에 대해 코드를 공유하십시오. – Webruster

+0

이 질문을 확인하십시오, [Here] (https://stackoverflow.com/questions/46153968/how-to-access-sdcard-files-in-ionic-3) 전용 내부 저장소에 액세스 할 수 있습니다. –

+0

이 질문을 확인하십시오. [Here] (https://stackoverflow.com/questions/46153968/how-to-access-sdcard-files-in-ionic-3) 내부 저장소 만 액세스됩니다. –

답변

3

귀하의 문제는 허가와 관련이 있다고 생각합니다. 첨부 파일에 대한 권한을 부여하기 위해이 파일을 구현했습니다.이 도움을 받으시기 바랍니다. 문제는 내 두 번째 해결책을 시도하기 전에 Permission Issue 주로 관련이기 때문에이 내용의 Source에서 당신의 config.xml

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

에서이 키를 포함하려면이 플러그인 cordova.plugins.permissions

function checkPermission() { 
      var permissions = cordova.plugins.permissions; 
      permissions.hasPermission(permissions.READ_EXTERNAL_STORAGE, checkPermissionCallback, null); 
     } 

function checkPermissionCallback(status) { 
      $localStorage.StoragePermission = status.hasPermission; 
      if (!status.hasPermission) { 
       var permissions = cordova.plugins.permissions; 
       permissions.requestPermission(permissions.READ_EXTERNAL_STORAGE, null, null);     
      } 
     } 
3

을하려고 시도한다 :

이전 버전의 플러그인은 임시 파일과 영구 파일의 위치를 ​​선택합니다 장치가 이라는 SD 카드 (또는 동등한 저장 장치 파티션)가 마운트되었다고 주장하는지 여부를 기반으로합니다. SD 카드가 마운트되었거나 큰 내부 저장소 파티션을 사용할 수있는 경우 (예 : Nexus 기기의 경우) 영구 파일은 해당 공간의 루트에 저장됩니다. 즉, 은 모든 Cordova 앱이 카드에서 사용 가능한 모든 파일을 볼 수 있음을 의미했습니다.

SD 카드를 사용할 수없는 경우 이전 버전에서는 데이터를/data/data/아래에 저장하여 다른 각 앱을 개로 분리하지만 여전히 사용자간에 데이터가 공유 될 수 있습니다.

파일 저장 위치에 파일을 저장할지 또는 이전 논리를 사용하여 응용 프로그램의 config.xml 파일에 환경 설정으로 파일을 저장할지 여부를 선택할 수 있습니다. 이렇게하려면 두 행 중 하나를 config에 추가하십시오.XML :

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

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

해결 방법 2 : 당신이 base64에 파일 내용을 보낼 수 있습니다

, 당신의 이온 응용 프로그램에 angular-base64을 통합하고를 보내려고 시도 base64 형식의 전자 메일은 다음과 같습니다.

,210

그래서이 방법으로 당신은 첨부에게`코르도바 플러그인 file` 플러그인, 그것이 디렉토리 및 이메일을 저장하는 파일을 선택, 그래서 시도 수를 생성입니다 무엇을`TXT를 추가 할 수

+0

저는 개발 컴퓨터가 아니기 때문에이 질문에서받은 해결책 중 하나를 테스트 할 수는 없지만이 솔루션에 현상금을 제공 할 것입니다. 권한 업데이트가 작동하지 않는 경우 추가 솔루션을 제공합니다. 나는 한 번 시험 할 수 있으면 정답을 표시하고 두 가지 해결책 모두를 상향 투표하고 있습니다. –