2016-08-29 8 views
1

Meine plattformübergreifende Xamarin Forms App (iOS und Android) muss eine E-Mail senden (auf Anfrage vom Benutzer). Gerade jetzt, wenn der Benutzer auf die entsprechende Schaltfläche Ich bin AufrufXamarin Forms - Navigationsstapel beim Senden der E-Mail unterbrochen

Page.Navigation.PushAsync(new SendEmailPage) 

Und dann im SendEmailPage Konstruktor ich die DependencyService bin mit E-Mail senden:

IMail mail = DependencyService.Get<IMail>(); 
mail.SendMessage ("Contents"); 

Ich habe implementiert IMail in Android und iOS, aber nur in der Android-Version suchen:

void IMail.SendMessage (string contents) 
{ 
    Intent emailIntent = new Intent(Intent.ActionSend); 
    emailIntent.SetType ("message/rfc822"); 
    emailIntent.PutExtra (Intent.ExtraEmail, new string [] { "[email protected]" }); 
    emailIntent.PutExtra (Intent.ExtraSubject, "Subject"); 
    emailIntent.PutExtra (Intent.ExtraText, contents); 
    Forms.Context.StartActivity (Intent.CreateChooser (emailIntent, "Send email")); 
} 

Wenn ich diesen Code ausführen, und auf die entsprechende Schaltfläche klicken, es öffnet sich eine E-Mail „Compose“ Fenster mit allen oben die entsprechenden Informationen ausgefüllt, und ich kann auf die Schaltfläche "Senden" klicken, um die E-Mail zu senden. Cool!

Seite Frage: Bin ich richtig, wenn man annimmt, dass es keine Möglichkeit gibt, eine E-Mail "ruhig" zu senden (ohne dass ein zusätzlicher Benutzereingriff erforderlich ist)? Dies würde nicht böswillig geschehen, unsere App würde dies nur tun, wenn der Benutzer darum bittet, und würde sicherlich die entsprechenden Privilegien anfordern, wenn dies möglich ist.

Hauptfrage # 1: Wenn das "Verfassen" -Fenster erscheint, wenn ich auf die Zurück-Schaltfläche in der Titelleiste klicke, bringt es mich zurück zu meinem Posteingang, nicht zurück zu meiner Anwendung. Wie rufe ich die E-Mail-Absicht/-Aktivität so auf, dass der Zurück-Button den Benutzer zurück zu meiner App bringt?

Hauptfrage # 2: Wenn das "Verfassen" -Fenster erscheint, wenn ich auf die Zurück-Schaltfläche unten auf dem Bildschirm klicke, kommt es zurück zu meiner App, aber sagt mir "Nachricht als Entwurf gespeichert" was ich nicht will. Ich möchte die Nachricht lieber löschen lassen und sie neu erstellen, wenn der Benutzer die entsprechende Schaltfläche erneut drückt.

Antwort

0

Für Haupt Frage # 1, glaube ich, dass die Aktivität mit

Forms.Context.StartActivityForResult (Intent.CreateChooser (emailIntent, "Send email")); 

statt Start:

Forms.Context.StartActivity (Intent.CreateChooser (emailIntent, "Send email")); 

sollten zusammenarbeiten, um Sie zurück zu Ihrem Forms Aktivität zu erhalten. Zumindest in einer Nicht-Formular-App, die funktionieren sollte, und ich vermute, dass es in einer Form-App genauso sein sollte, aber nicht 100% sicher.

Ich kann Ihre Nebenfrage nicht beantworten, obwohl ich vermute, dass dies beabsichtigt ist. Ich bin sicher, dass Sie nichts böswilliges tun wollen und dass der Benutzer die E-Mail anfordert, aber wenn das Betriebssystem das Senden der E-Mail ohne Benutzerinteraktion erlaubt, können Entwickler, die nicht so ethisch sind wie Sie, die Funktion missbrauchen. Aber zitieren Sie mich nicht, es könnte sehr wohl eine Möglichkeit geben, es zu tun, ich weiß einfach nicht, wie wenn.

Wie Haupt Frage # 2, ohne das Verhalten der E-Mail-Client-Anwendung zu ändern, sehe ich nicht, wie Sie tun können, wie Sie möchten, wie es der E-Mail-Client selbst ist, der die E-Mail als Entwurf speichert.

+0

Leider nicht ... (1) Forms.Context ist keine Aktivität, aber ich kann sie in eine Aktivität umwandeln. (2) Wenn ich activity.StartActivityForResult aufruft, ist das Verhalten identisch. –