通过电子邮件意图从edittext传递信息

时间:2013-03-23 04:57:46

标签: android email android-intent android-edittext

我有两个文本框:一个用于主题,另一个用于实际消息。不幸的是,我在使用最新的gmail应用程序运行android 4.2.2的手机上测试时,我正在使用的代码没有传递任何信息。

更新方法。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
setContentView(R.layout.tipus);
findViewById(R.id.sendemailbutton).setOnClickListener(emailclick);
findViewById(R.id.cancelbtn).setOnClickListener(myclick);
subjectline = (EditText) findViewById(R.layout.tipus);
emailcontent = (EditText) findViewById(R.layout.tipus);

}

public final Button.OnClickListener emailclick = new Button.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);  

        String aEmailList[] = { oliuremail, vikemail };   
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, aEmailList);  //supposed to pass info of the emails to the email app
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subjectline.getText().toString());  //not taking stuff from an edittext, only things in quotes. 
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, emailcontent.getText().toString());  //won't accept anything from an edittext.
        emailIntent.setType("plain/text");
        startActivity(Intent.createChooser(emailIntent, "Send Email Using...")); 
    }

};

tipus.xml(已更新)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TextView
    android:id="@+id/messagetitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/emailmessage"
    android:layout_alignParentLeft="true"
    android:layout_marginBottom="46dp"
    android:text="Message:" />

<EditText
    android:id="@+id/emailmessage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_marginBottom="122dp"
    android:ems="10"
    android:hint="Write your message here."
    android:inputType="textMultiLine" />

<Button
    android:id="@+id/cancelbtn"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:background="@drawable/arrowrightblack" />

<Button
    android:id="@+id/sendemailbutton"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:text="Send" />

<EditText
    android:id="@+id/subjectline"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/subjectdenoter"
    android:layout_alignBottom="@+id/subjectdenoter"
    android:layout_alignParentRight="true"
    android:ems="10"
    android:hint="Please Add a Subject." />

<TextView
    android:id="@+id/subjecttitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/textView3"
    android:layout_alignRight="@+id/textView3"
    android:layout_marginBottom="82dp"
    android:text="Subject:" />

当我使用此代码时,信息将传递到电子邮件应用程序。但是,我有两个文本框,用户将在其中键入主题,然后键入电子邮件的实际文本。我需要从两个文本框传递的信息发送到电子邮件应用程序。我查看了stackoverflow和tutsplus,他们有一些信息,但那些谈论从文本框传递数据的信息并不是很有用。提前致谢。

编辑:

我终于找到了答案。您必须创建一个私有字符串,例如:

private String getSubjectContent() {
    String text = "";

    text += yourtexteditname.getText().toString() + "\n";

    return text;
}

注意:您可以在课程中制作尽可能多的这些方法。在每个方法中,只需将“yourtexteditname”替换为textEdit的名称。如果您想从多个textEdits获取信息并将它们放在电子邮件中的一个位置(主题行,邮件正文等),您还可以将多个textEdits放入一个方法中。

然后,您所要做的就是添加正常代码以启动意图。像这样:

public final Button.OnClickListener emailclick = new Button.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        variablename = (EditText) findViewById(R.id.textviewname); //defining the textedit you want to get info from. 
        variablename = (EditText) findViewById(R.id.othertextviewname); //defining the textEdit you want to get info from.
        Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
        emailIntent.setType("message/rfc822"); //specifies message for email app.
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, getEmailContent()); //adds the actual content of the email by calling the method previously defined
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, getSubjectContent()); //adds the subject by calling the method previously defined.
        startActivity(Intent.createChooser(emailIntent, "Title of the dialog chooser"));


    }

};

2 个答案:

答案 0 :(得分:1)

您可以使用String变量来使用它。 像..

String subjectdata = edittext.getText().toString();
String sharedata = edittext1.getText().toString();

Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_SUBJECT, subjectdata);
email.putExtra(Intent.EXTRA_EMAIL, new String[]{"abc@gmail.com"});
email.putExtra(Intent.EXTRA_TEXT, shareddata);
email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Send Mail :"));

答案 1 :(得分:0)

由于您要向多个电子邮件收件人发送邮件,我认为您需要使用Intent.ACTION_SEND_MULTIPLE代替Intent.ACTION_SEND

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);

有些实施方案也更喜欢Intent.ACTION_SENDTO

(可选)您可能想要使用它:

emailIntent.setType("message/rfc822");

而不是:

emailIntent.setType("plain/text");

最后,从EditText字段中检索用户的文本条目,如下所示:

String <body-or-subject-text> = editText.getText().toString();