2015-03-02 40 views
10

Chcę zaimplementować przycisk, który po naciśnięciu otworzy domyślny program pocztowy z załącznikiem.Wysyłanie wiadomości e-mail z załącznikami programowo na Androidzie

Podążam za this, ale otrzymuję komunikat o błędzie na stronie startActivity, mówiąc, że spodziewa się parametru aktywności, podczas gdy ja to zamierzam. Używam API 21 i Android Studio 1.1.0, więc może ma to coś wspólnego z komentarzem w odpowiedzi podanej w linku?

To jest mój czwarty dzień jako programista Androida, przepraszam, jeśli brakuje mi czegoś naprawdę podstawowego.

Oto mój kod:

public void sendFileToEmail(File f){ 

    String subject = "Lap times"; 
    ArrayList<Uri> attachments = new ArrayList<Uri>(); 
    attachments.add(Uri.fromFile(f)); 
    Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); 
    intent.putExtra(Intent.EXTRA_SUBJECT, subject); 
    intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, attachments); 
    intent.setClassName("com.android.email", "com.android.mail.compose.ComposeActivity"); 

    try { 
     startActivity(intent); 
    } catch (ActivityNotFoundException e) { 
     e.printStackTrace(); 
    } 
+0

zaakceptuj moją odpowiedź, jeśli jest ona dla ciebie odpowiednia. Aby uniknąć tego pytania z nieudzielonej listy pytań w SOF –

Odpowiedz

17

Myślę, że problemem jest to, że nie używasz prawidłową ścieżkę do pliku.

następujące prace dla mnie:

Intent emailIntent = new Intent(Intent.ACTION_SEND); 
emailIntent.setType("text/plain"); 
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); 
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject here"); 
emailIntent.putExtra(Intent.EXTRA_TEXT, "body text"); 
File root = Environment.getExternalStorageDirectory(); 
String pathToMyAttachedFile = "temp/attachement.xml"; 
File file = new File(root, pathToMyAttachedFile); 
if (!file.exists() || !file.canRead()) { 
return; 
} 
Uri uri = Uri.fromFile(file); 
emailIntent.putExtra(Intent.EXTRA_STREAM, uri); 
startActivity(Intent.createChooser(emailIntent, "Pick an Email provider")); 

też trzeba dać uprawnienia użytkownika za pomocą pliku manifestu jak poniżej

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

Plik jest parametrem funkcji, więc nie widzę, w jaki sposób może to być problem. –

+0

Plik jest tylko parametrem, ale musisz sprawdzić, czy jest on dostępny, czy nie. Musisz również odczytać uprawnienia do pamięci zewnętrznej, aby odczytać pliki. –

+1

To działa .. Wielkie dzięki .. :) – Kushal

2

spróbuje użyć this.It działa ...

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
        emailIntent.setType("*/*"); 

        emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(listVideos.get(position).getVideoPath())));//path of video 
        startActivity(Intent.createChooser(emailIntent, "Send mail...")); 

Dzięki