我想开始与客户发送电子邮件的意图。但context.startActivity
在图书馆项目中不起作用。你能帮我吗?由于
public class email {
private Context context;
public email(Context context) {
this.context = context;
}
public void send(String to, String subject, String body) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_EMAIL, to);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, body);
try {
context.startActivity(Intent.createChooser(intent, "sending..."));
}
catch (ActivityNotFoundException e) {
}
}
OK。Logcat说:
. lang。运行时异常:无法启动活动ComponentInfo{com.example.test。android.util.AndroidRuntimeException:从Activity上下文外部调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这真是你想要的吗?
我通常使用
getActivity().getBaseContext()
在大多数情况下,但如果你卡住了,这里有另一种方法。
你可以定义一个抽象的baseactivity,然后让你所有的activity实现它,或者至少是你需要上下文引用的那个。
` `公共抽象类BaseActivity继承Activity…私有的静态上下文;…
@Override
public void onCreate() {
super.onCreate();
BaseApplication.baseContext = getApplicationContext();
…
public static Context getMyContext() {
return BaseApplication.baseContext;
}
你可以在其他地方调用getMyContext()稍微容易一点,但首先只有在getActivity(). getbasecontext()不起作用时才使用这个
我需要更多关于你的代码的细节,比如从什么类型的活动被调用,等等给出一个确切的答案。
我自己找到了一个解决方案:当我想将context
传递给email
类的构造器时,我使用getApplicationContext()
,当我将其更改为this
时,它工作了。
在开始活动之前添加intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
。你需要设置这个标志,每当你试图切换到一个活动,但你的原点不是一个活动本身。