从库中启动ACTION_SEND意图

时间:2015-05-19 10:42:07

标签: android android-intent android-library

我想开始向客户发送电子邮件的意图。但是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) {

    }
}

行。 Logcat说:

  

java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.test.MainActivity}:android.util.AndroidRuntimeException:从Activity上下文外部调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗?

3 个答案:

答案 0 :(得分:0)

通常我使用

getActivity().getBaseContext()

在大多数情况下,如果你遇到困难,可采用另一种方式。

您可以定义抽象基本活动,然后让所有活动实现它,或者至少是您需要在其中使用上下文引用的活动。

`public abstract class BaseActivity extends Activity ...     private static Context baseContext; ...

@Override
public void onCreate() {
    super.onCreate();

    BaseApplication.baseContext = getApplicationContext();

...

public static Context getMyContext() {
    return BaseApplication.baseContext;
}

`

然后你可以更容易地在其他地方调用getMyContext(),但是如果getActivity()。getBaseContext()不起作用,FIRST只使用它。

我需要更多关于您的代码的详细信息,例如要调用的活动类型等,以提供准确的答案。

答案 1 :(得分:0)

在开始活动之前添加intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);。每当您尝试切换到活动时,您需要设置此标记,但您的原始位置不是活动本身。

答案 2 :(得分:0)

我自己找到了一个解决方案: 当我想将context传递给我使用email的{​​{1}}类的构造函数时,当我将其更改为getApplicationContext()时,它就有用了。