2016-07-17 17 views
1

Ich muss eine Reihe von Dateien an eine E-Mail anhängen, aber ich bekomme einen Fehler beim Aufruf der Absicht.Android "keine Anwendungen können diese Aktion durchführen" mit "send_multiple", sendto funktioniert gut

Wenn ich Intent.ACTION_SENDTO verwende, gibt die Auswahl die Google Mail App und den generischen E-Mail-Client zurück. Wenn ich jedoch versuche, Intent.ACTION_SEND_MULTIPLE als Parameter zu übergeben, erhalte ich keine Anwendungen, die die Absicht erhalten könnten. Wie löse ich das?

Hier ist der Code, den ich verwende.

  ArrayList<Uri> attachments = new ArrayList<>(); 
      File path = new File(Environment.getExternalStorageDirectory() + "appFolder"); 
      if (path.exists()){ 
       for (File child : path.listFiles()) { 
        attachments.add(Uri.fromFile(child)); 
       } 
       //Intent intent = new Intent(Intent.ACTION_SENDTO);//This works, but I can't attach several files. 
       Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);//This is the part that SHOULD work, but doesn't... 
       intent.setType("message/rfc822"); 
       intent.putExtra(Intent.EXTRA_EMAIL, new String[]{""}); 
       intent.setData(Uri.parse("mailto:")); 
       intent.putExtra(Intent.EXTRA_SUBJECT, ""); 
       intent.putExtra(Intent.EXTRA_TEXT, ""); 
       intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, attachments); 
       try { 
        startActivity(Intent.createChooser(intent, "Send Email")); 
       } catch (ActivityNotFoundException anfe) { 
        anfe.printStackTrace(); 
       } 
      } 

Antwort

1

beginnen, indem sie von intent.setData(Uri.parse("mailto:")); befreien. ACTION_SEND_MULTIPLE verwendet setData() nicht.

Dann loswerden intent.putExtra(Intent.EXTRA_TEXT, "");. Es ist nicht erforderlich, dass ACTION_SEND_* sowohl EXTRA_STREAM als auch EXTRA_TEXT berücksichtigt. Da Sie den Text nicht verwenden, erhalten Sie zuverlässigere Ergebnisse, wenn Sie diesen Zusatz entfernen. Wenn Sie darauf bestehen, es zu behalten, müssen Sie put...ArrayListExtra(), nicht putExtra() verwenden, da ACTION_SEND_MULTIPLE ein Array erwartet, kein einzelner Wert.

Auch nach diesen Änderungen können Sie jedoch immer noch keine Aktivitäten erhalten. Nur wenige Apps implementieren ACTION_SEND_MULTIPLE, und nur eine Teilmenge von ihnen unterstützt message/rfc822.

+0

Es hat gut funktioniert! Ich hatte nicht erwartet, dass nur durch Entfernen eines Paares von optionalen Parametern funktionieren würde. Vielen Dank. – Stalker

+1

@Stalker: Das Extra ist optional. 'setData()', auf der anderen Seite, sagt, dass Sie Aktivitäten erwarten, die 'Uri' unterstützen. In Ihrem Fall würden Sie sagen, dass Sie Aktivitäten erwarten, die 'mailto:' unterstützen. Da keine 'ACTION_SEND_MULTIPLE'-Implementierung die 'Uri' verwenden soll, wird ihr' 'nicht dafür werben, dass sie' mailto: 'unterstützen. Netz: Keine Übereinstimmungen auf Ihrer Absicht. Das Entfernen dieses 'Uri' entfernt diese Anforderung von Übereinstimmungen und öffnet andere Kandidaten. Denken Sie daran, dass Sie immer noch mit Geräten umgehen müssen, die keine solchen Übereinstimmungen haben. – CommonsWare

Verwandte Themen