문제

이메일을 보내려는 의도를 시작하려고합니다. 그 모든 것이 효과가 있지만 실제로 이메일을 보내려고 할 때 부부의 '이상한'일이 발생합니다.

코드는 다음과 같습니다

Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("image/jpeg");
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Photo");
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://sdcard/dcim/Camera/filename.jpg"));
sendIntent.putExtra(Intent.EXTRA_TEXT, "Enjoy the photo");
startActivity(Intent.createChooser(sendIntent, "Email:"));

따라서 Gmail 메뉴 컨텍스트를 사용하여 시작하면 첨부 파일이 표시됩니다. 이메일이 누구인지 입력하고 신체 및 피사체를 편집 할 수 있습니다. 큰 문제는 없습니다. 나는 보내기를 때렸다. 유일한 것은 첨부 파일이 전송되지 않는다는 것입니다.

그래서. 이메일 메뉴 컨텍스트 (휴대 전화의 백업 이메일 계정)와 함께 시도해 보지 않겠습니까? 첨부 파일을 보여 주지만 신체 나 피험자에는 전혀 텍스트가 없습니다. 보낼 때 첨부 파일이 올바르게 전송됩니다. 그것은 무언가가 꽤 잘못되었다고 믿게 할 것입니다. 매니페스트 시작에 새로운 권한이 필요합니까? 내가 뭘 잘못하고 있죠?

도움이 되었습니까?

해결책

또한 같은 문제가 발생합니다

암호:

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
    emailIntent.setType("image/jpeg");
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] 
    {"me@gmail.com"}); 
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, 
    "Test Subject"); 
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, 
    "go on read the emails"); 
    Log.v(getClass().getSimpleName(), "sPhotoUri=" + Uri.parse("file:/"+ sPhotoFileName));
    emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:/"+ sPhotoFileName));
    startActivity(Intent.createChooser(emailIntent, "Send mail..."));

ADB LOGCAT에서 :

V/DumbDumpersMain( 3972):   sPhotoUri=file://sdcard/DumbDumpers/DumbDumper.jpg
I/ActivityManager(   56):   Starting activity: Intent { action=android.intent.action.CHOOSER comp={android/com.android.internal.app.ChooserActivity} (has extras) }
I/ActivityManager(   56):   Starting activity: Intent { action=android.intent.action.SEND type=jpeg/image flags=0x3000000 comp={com.google.android.gm/com.google.android.gm.ComposeActivityGmail} (has extras) }
I/ActivityManager(   56):   Starting activity: Intent { action=android.intent.action.SEND type=jpeg/image flags=0x2800000 comp={com.google.android.gm/com.google.android.gm.ComposeActivity} (has extras) }
D/gmail-ls(  120):      MailProvider.query: content://gmail-ls/labels/me@gmail.com(null, null)
D/Gmail   ( 2507):      URI FOUND:file://sdcard/DumbDumpers/DumbDumper.jpg

이메일 제공 업체가 0 길이 파일을 첨부하는 것 같습니다. 파일 시스템을 확인하면 파일이 있고 올바른 파일이 있습니다. 이미지 파일을 생성하는 코드는 이메일을 보내려고 시도하기 전에 잘 완성되었습니다.

누구든지 마술 재부팅없이 이것을 수정했습니다 (이미 시도했습니다)?

문안 인사,
지느러미

업데이트

나를위한 길은 그랬어야 했어

file:///sdcard/DumbDumpers/DumbDumper.jpg

추가가 필요합니다 / 이것은 루트 디렉토리를 가리킬 때 : 즉 :

file:// + /sdcard/DumbDumpers/DumbDumper.jpg

결합

file:///sdcard/DumbDumpers/DumbDumper.jpg

위의 스 니펫에서는 다음과 같습니다.

emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+ sPhotoFileName));

이게 도움이 되길 바란다. 디버그에 나이가 들었습니다.

문안 인사,
핀 레이

다른 팁

내 편에서 약간의 말. 나는 Gmail과 동일한 문제를 겪었지만 SD 카드에 문제의 파일을 먼저 저장하고 자산이 아닌 거기에서 검색 할 때 작동하는 것 같습니다. 그래서 내 코드는 다음과 같습니다.

Intent i = new Intent(Intent.ACTION_SEND);
i.putExtra(Intent.EXTRA_SUBJECT, "Title");
i.putExtra(Intent.EXTRA_TEXT, "Content");
i.putExtra(Intent.EXTRA_STREAM, uri);
i.setType("text/plain");
startActivity(Intent.createChooser(i, "Send mail"));

그리고 여기,

uri = Uri.fromFile(new File(context.getFilesDir(), FILENAME));

하다 ~ 아니다 일하는 동안

uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), FILENAME));

하다.

안부, 마이클

"uri.parse"사용 "Uri.fromFile (new File

환경 .getexternalstoragedirectory () - SDCard 또는 기타 외부 스토리지로가는 경로

이것이 실제로 정확한 것으로 보이지만, 무슨 일이 일어나고 있는지 확실하지 않지만 재부팅 후 작동하기 시작했습니다.

    Intent i = new Intent(Intent.ACTION_SEND);
    i.setType("message/rfc822");
    i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"example@mail.com"});
    i.putExtra(Intent.EXTRA_SUBJECT, "Data from app");
    i.putExtra(Intent.EXTRA_TEXT   , "experience number x");
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "filename.txt"));
    i.putExtra(Intent.EXTRA_STREAM, uri);
    startActivity(Intent.createChooser(i, "Send email..."));

나는 같은 문제를 겪고 해결책을 찾기 위해 어디서나 찾았습니다. 마침내 나는 상자에서 작동하는 오픈 소스 앱을 찾아서 어떻게했는지 살펴 보았습니다. 코드는 다소 길어서 여기에 인용하지 않고 링크를 게시합니다. 449 행의 SendEmail 기능을보십시오

http://rehearsalassist.svn.sourceforge.net/viewvc/rehearsalassist/android/trunk/src/urbanstew/rehearsalassistant/sessionplayback.java?revision=94&view=markup

코드가 비슷하게 리팩트를 리팩트했는데 이제 작동합니다. 나는 이것이 같은 상황에서 다른 사람들을 도울 수 있기를 바랍니다.

에서 RFC 1738 섹션 3.10 :

파일 URL은 양식을 취합니다.

   file://<host>/<path>

어디 주최자 경로에 액세스 할 수있는 시스템의 자격을 갖춘 도메인 이름이며 양식의 계층 적 디렉토리 경로입니다 디렉토리/디렉토리 /.../ 이름.

그래서 그것은 파일입니다 : /// path/from/root http : // host/path/from/root 두 번째와 세 번째 슬래시 사이에는 암시적인 '로컬 호스트'가 있기 때문입니다. 그러나 위에서 언급했듯이 uri.fromfile ()을 사용하여 빌드하십시오.

나는 같은 증상이 있었다. 제 경우에는 처음에 권한으로 첨부 파일을 저장했기 때문입니다. MODE_PRIVATE. 내가 변경하자마자 MODE_WORLD_READABLE 그런 다음 Gmail은 파일에 액세스하고 첨부 파일을 올바르게 보낼 수있는 것 같습니다.

더보기

이 솔루션 에서이 솔루션에서 Nicolas는 캐시 폴더 내부에 하나의 사본을 만듭니다. 여기에서 Gmail 의도에 액세스 할 수 있습니다!http://stephendnicholas.com/archives/974

public void sendMail(String path) {
        Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
        new String[] {AppConstant.server_mail});
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
        "IBPS ERROR Mail");
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,
        "This is an autogenerated mail from IBPS app");
        emailIntent.setType("image/png");
        Uri myUri = Uri.parse("file://" + path);
        emailIntent.putExtra(Intent.EXTRA_STREAM, myUri);
        startActivity(Intent.createChooser(emailIntent, "Send mail..."));
        }

또한 의도를 추가 해보십시오 .addflags (intent.flag_grant_read_uri_permission); 이것은 내 문제에 도움이되었습니다.

4 일 후에이 문제에 대한 해결책이 있습니다. Android (Java)에서 파일 클래스로 경로를 제공하는 동안 다음 사항에 주목하십시오.

1) 내부 스토리지 문자열 경로를 사용하십시오. 경로 = "/storage/sdcard0/myfile.txt";

2) Path = "/storage/sdcard1/myfile.txt";

3) 매니페스트 파일의 권한을 언급하십시오.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

4) 먼저 확인이 파일 길이를 확인하십시오.

5) sdcard0 & sdcard1에 관한 ES 파일 탐색기의 경로를 확인하십시오.

예를 들어

File file=new File(path); 
long=file.length();//in Bytes

첨부 파일이있는 이메일 보내기 : (문서)

의도 emailintent = 새로운 의도 (intent.action_send); emailintent.settype (http.plain_text_type);

emailintent.putextra (intent.extra_email, new String [] { "jon@example.com"});

emailintent.putextra (intent.extra_subject, "이메일 주제"); emailintent.putextra (intent.extra_text, "이메일 메시지 텍스트"); emailintent.putextra (intent.extra_stream, uri.parse ( "content : // path/to/email/affment");

// URIS의 배열 목록을 전달하여 여러 항목을 첨부 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top