2010-07-09 4 views
3

휴대 전화에 앱의 설치 디렉토리에 텍스트 파일을 직접 저장하는 Android 앱이 있습니다. 사용자가 새 이메일을 작성하고 저장된 텍스트 파일을 첨부 할 수있게해야합니다. 이메일을 보낼 의도가 생기면 모든 것이 Gmail에 올바르게 표시되지만 첨부 파일이 전송되지 않습니다. 스택 오버플로에 대한 내 검색은 모두 SD 카드에서 이미지 파일을 첨부하는 것으로 만 처리됩니다. 아래는 내가 사용한 코드입니다. 제가 잘못했는지 알려주세요.앱 디렉토리에 로컬로 저장된 텍스트 파일을 첨부하는 방법

File myFile = new File(getFilesDir() + "/" + "someFile.txt"); 
FileOutputStream stream = null; 

if(file != null) 
{ 
    steam = openFileOutput("someFile.txt", Context.MODE_WORLD_READABLE); 
    stream.write(some_data); 

    Uri uri = Uri.fromFile(myFile); 

    Intent sendIntent = new Intent(Intent.ACTION_SEND); 
    sendIntent.setType("text/plain"); 
    sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject); 
    sendIntent.putExtra(Intent.EXTRA_TEXT, email_text); 
    sendIntent.putExtra(Intent.EXTRA_STREAM, uri); 

    file.close(); 

    startActivity(Intent.createChooser(sendIntent, "Email:")); 
} 

나는 sendIntent.setType ("application/octet-stream"); 그러나 그것은 차이를 만들지 않았습니다. 나는 왜 파일이 ​​첨부되지 않고 보내지는지를 놓치고있다.

아이디어가 있으십니까?

답변

4

이전에 본 적이 있었지만 해결할 수있는 유일한 방법은 SD 카드에 파일을 작성하는 것이 었습니다.

파일의 위치를 ​​문제의 원인으로 제거하려는 경우 SD 카드에 파일을 쓰고 첨부하는 것이 좋습니다.

+0

음 ... 그게 유감입니다. 나는 이것을 시도해보고 효과가 있는지 알아 보겠습니다. 감사합니다 알. SD 카드가없는 경우 어떤 접근 방식을 취 했습니까? Intent 이메일의 EXTRA_TEXT 부분에 모든 파일 데이터를 첨부하기로 결정하셨습니까? – Michael

+0

카드가없는 경우 "SD 카드 메시지가 필요합니다"라고 표시됩니다. 이상한 것은 아니지만 첨부 파일이 첨부 파일로 도착하지 않았다고 불평하는 사용자의 문제를 피하고 메일 클라이언트에서 파일 -> 저장하고 다른 응용 프로그램에서 가져올 수 없다는 불만과 관련된 문제는 피할 수 있습니다. 파일 (메일 헤더가 파일에 있기 때문에). –

+0

다시 한번 감사드립니다. 파일을 SD 카드에 저장하도록 코드를 변경하면됩니다. – Michael

5

나는 정확히 똑같은 문제 (Gmail 메시지에 텍스트 파일 첨부)를 실행했습니다. 당신이 안드로이드 로그에 보면, 그 이유는 다음과 같습니다

02-28 21:01:28.434: E/Gmail(19673): file:// attachment paths must point to file:///mnt/sdcard. Ignoring attachment file:///data/data/com.stephendnicholas.gmailattach/cache/Test.txt 

이 해결 방법으로 Gmail에서 첨부 할 수 있도록 응용 프로그램의 내부 캐시에있는 파일에 대한 액세스를 제공하는 컨텐트 프로를 사용할 수 있습니다. 방금하는 방법에 대해 blog post을 작성했습니다.

도움이 되었기를 바랍니다 :)

+0

감사합니다. stephendnicholas, 나는 귀하의 게시물을 확인합니다! – Michael

+0

+1 이것이 내가 실제로 문제를 ("Attachment in SD") eventhought하는 유일한 해결책이기 때문에 +1. 아직 귀하의 접근법을 시도하지 않았으며 (그것이 작동하는지 모르겠 음). 나는 당신의 블로그 포스트를 북마크했다. –

관련 문제