为什么电子邮件Intent无法使用Common(非Activity)类

时间:2015-07-01 22:00:49

标签: android android-intent

此代码在Activity类中完美运行,但如果我将此代码移动到Common(非Activity)类,我会收到此错误:

  

从Activity上下文外部调用startActivity()需要   FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗?

以下是代码:

Database_load(struct Connection *conn)

conn is not null

conn->file is not null

ERROR: Failed to load database.

这就是我从活动中调用的方式:

public static void emailIntend(Context context) {

        Intent emailIntent = new Intent(Intent.ACTION_SENDTO, null);

        emailIntent.putExtra(Intent.EXTRA_SUBJECT, context.getString(R.string.string_email_send_feedback_subject));
        String[] receipients = new String[1];
        receipients[0] = context.getString(R.string.string_email);
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, receipients);

        emailIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        context.startActivity(Intent.createChooser(emailIntent, "Send email to the developer..."));

    }

我尝试用 Common.emailIntend( getApplicationContext() ); 替换getApplicationContext(),但没有帮助。

请告诉我,如果我做的事情不正确。

1 个答案:

答案 0 :(得分:2)

问题是您在错误的意图上调用addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 结合使用getApplicationContext(),导致错误。

Intent.createChooser()的调用会返回一个新的意图,而那是需要FLAG_ACTIVITY_NEW_TASK标记的意图,因为它是您传递给的标记。 startActivity()

请注意,如果我将Activity上下文传递给方法(活动中的FLAG_ACTIVITY_NEW_TASK),则不需要this;

另请注意,我还必须稍微修改您的代码以使选择器正常工作,即使在活动中,您的原始代码也不适用于我。

以下代码适用于我,甚至使用getApplicationContext()作为传入的上下文:

public static void sendEmail(Context context){
    String uriText =
            "mailto:test@gmail.com" +
                    "?subject=" + Uri.encode("test subject");
    Uri uri = Uri.parse(uriText);

    Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri);

    Intent i = Intent.createChooser(emailIntent, "Send email to the developer...");
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    context.startActivity(i);
}

参考文献:

ACTION_SENDTO for sending an email

startActivity within a subclass of Application