从库中启动ACTION_SEND Intent



我想开始与客户发送电子邮件的意图。但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);。你需要设置这个标志,每当你试图切换到一个活动,但你的原点不是一个活动本身。

相关内容

  • 没有找到相关文章

最新更新