我有一些代码正在侦听套接字上的消息,并将数据从套接字解析为要发送的电子邮件。我能够创建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;
}
答案 0 :(得分:1)
你从Intent
回来的createChooser()
可能没有你的旗帜。请尝试将其添加到createChooser()
。
请注意:
让服务弹出活动非常不寻常,应该可以被用户禁用,因为它可能非常具有侵入性。
有一个服务弹出选择器是糟糕的用户体验。你真的认为当这个“电子邮件”选择对话框出现时,你的用户会知道发生了什么吗?