此代码在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()
,但没有帮助。
请告诉我,如果我做的事情不正确。
答案 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);
}
参考文献: