这段代码在Activity类中可以正常工作,但是如果我将此代码移到Common(非Activity)类中,则会收到此错误:
从Activity上下文外部调用startActivity()需要
FLAG_ACTIVITY_NEW_TASK标志。这真的是您想要的吗?
这是代码:
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()
替换this
,但是没有帮助。请告诉我我是否做错了什么。
最佳答案
问题是您在错误的Intent上调用addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
。
结合使用getApplicationContext()
会导致错误。
调用Intent.createChooser()
返回一个新的Intent,这是需要FLAG_ACTIVITY_NEW_TASK
标志的,因为这是您要传递给startActivity()
的那个。
注意,如果我将Activity上下文传递给方法(Activity中的FLAG_ACTIVITY_NEW_TASK
),则不需要this
;
还要注意,我还必须对您的代码进行一些修改才能使选择器正常工作,即使在活动中,您的原始代码也不适合我。
即使使用getApplicationContext()
作为传入的上下文,以下代码也对我有用:
public static void sendEmail(Context context){
String uriText =
"mailto:[email protected]" +
"?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