2014-05-22 1 views
0

javamail을 사용하여 이미지를 전자 메일로 보내려고합니다. 나는이 예외의 원인이되는 방법의 일부라고 생각FileNotFoundException - 안드로이드에서 절대 Uri를 사용하고 있지만

05-22 15:05:29.300: W/System.err(29154): javax.mail.MessagingException: IOException while sending message; 
05-22 15:05:29.300: W/System.err(29154): nested exception is: 
05-22 15:05:29.300: W/System.err(29154): java.io.FileNotFoundException: /content:/media/external/images/media/35367: open failed: ENOENT (No such file or directory) 

:하지만 FileNotFoundException이 얻을

 System.out.println(params[1]); 
     File filename=new File(params[1]); // params[1]=content://media/external/images/media/35367 
     DataSource source = new FileDataSource(filename);//uses aditional 
     messageBodyPart.setDataHandler(new DataHandler(source)); 

을하지만이 API를 이해하면 바로 절대 URI가에 대한 문제를 isn'ta 파일 개체. 그리고 나는 파일이 존재하지 않는다고 생각한다. 왜냐하면이 메소드 바로 앞에 나는이 URI에 의해 ImageView를 설정하기 때문이다. 이것이 문제가 될 수 있습니까? 안드로이드가 자동으로이 파일을 잠그는 것과 같은 것?

는 또한 AndroidManifest를에 읽기 및 쓰기 권한을 설정 : 추가 정보가 필요한 경우
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

그냥 언급.

편집

: 내가 미안 보내려 이미지의 경로를 고개가

+0

첨부 파일을 보내지 않고 메시지를 보내기 위해 javamail을 사용해 보셨나요? 첨부하려는 파일과 관련이 없지만 다른 것일 수 있습니다. –

+0

@StealthRabbi 첨부 파일없이 메시지를 보내면 ... –

+0

혹시 해결책을 찾았습니까? 나는이 문제에 직면하고있다. dropbox (/ storage)의 이미지를 첨부해도 문제가 없지만, 네이티브 앱을 포함한 다른 이미지는 외부 파일 권한이 있어도 실패한다. – RelicScoth

답변

0

...이 저장되는 경로에서 완전히 다른 이

/content:/media/external/images/media/35367 

가 유효하지 않습니다 경로를 선택하십시오. 절대 경로를 원할 경우

/media/external/images/media/35367 
+0

uri.getPath(). toString()을 사용하여 가져 오지만이 예외가 계속 발생하고 uri.isAbsolute) 내가 사용하는 URI가 절대적인지 확인합니다. –

0

이미지의 확장자를 uri 밖으로 남겨 두지 않으셨습니까?

예 : JPG 이미지의 경우 /content:/media/external/images/media/35367.jpg?

+0

System.out.println (uri.getPath(). toString)을 사용하는 경우 .jpg가 누락되었지만 문자열에 추가하여 문제를 해결하지 못했습니다. –

+0

"jpg"이미지를 선택 했습니까? –

+0

캠에 내 handys와 함께 그것을 쐈어 ...하지만 그것은 jpg .. –

2

저는 javamail을 사용하여 이미지를 이메일로 보내려고합니다. 하지만 FileNotFoundException이 발생합니다.

당신이 갖고있는 것은 파일이 아니기 때문입니다. ContentProvider의 항목입니다.

openInputStream()ContentResolver에 사용하여 콘텐츠에 InputStream을 가져 오기. 그런 다음 FileDataSource 대신 ByteArrayDataSource을 사용하십시오. 이론적으로, 그것은 작동해야하고, 적어도 작동하는 무언가에 당신을 더 가깝게해야합니다.

+0

그래서 getContentResolver() AsyncTask에서 사용하여 호출 할 수 없기 때문에 내가 ContentResolver 얻을 어떻게 –

+0

@ 버나 : 'AsyncTask'에'ContentResolver'를 가져 와서 데이터 멤버에서 그것을 유지하는 생성자를 구현하십시오. 그런 다음,'ContentResolver'를 사용하십시오. – CommonsWare

+0

나는 그것을 시험해 보았다. 그러나 나는 계속 같은 예외를 얻고있다. –

관련 문제