Android开发 - 从服务开始活动

时间:2011-05-16 18:06:41

标签: android email exception

我有一些代码正在侦听套接字上的消息,并将数据从套接字解析为要发送的电子邮件。我能够创建intent,并在其上设置FLAG_ACTIVITY_NEW_TASK标志,但是当我打电话时 startActivity(Intent.createChooser(intent, "Email"));

我得到一个AndoridRuntimeException:从Activity上下文外部调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗?

让我感到困惑的是我明确打过电话 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

我错过了一些明显的东西吗?

protected void doEmail(DataInputStream in)  throws IOException {
  String id = in.readUTF();
  createEmail(id);
}

protected void createEmail(String rawEmailString) {
  // need to get to, subject, body and path from string
  String[] stringArray = rawEmailString.split("~");
  Intent intent = prepareEmail(stringArray[0], stringArray[1], stringArray[2], stringArray[3]);
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  startActivity(Intent.createChooser(intent, "Email"));
}

public Intent prepareEmail(String to, String subject, String body, String pathToAttachment){
  Intent intent = new Intent(Intent.ACTION_SEND);
  intent.putExtra(Intent.EXTRA_EMAIL, to);
  intent.putExtra(Intent.EXTRA_TEXT, body);
  intent.putExtra(Intent.EXTRA_SUBJECT, subject);
  intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(pathToAttachment));
  intent.setType("*/*");

  return intent;
}

1 个答案:

答案 0 :(得分:1)

你从Intent回来的createChooser()可能没有你的旗帜。请尝试将其添加到createChooser()

的结果中

请注意:

  • 让服务弹出活动非常不寻常,应该可以被用户禁用,因为它可能非常具有侵入性。

  • 有一个服务弹出选择器是糟糕的用户体验。你真的认为当这个“电子邮件”选择对话框出现时,你的用户会知道发生了什么吗?