我有一个活动“结果”可以进行一些计算,还有一个按钮供用户发送包含这些结果的电子邮件。我已经创建了一个名为“Sender”的类来完成此任务,但是startActivity在我的Sender类中不起作用。我知道实际的意图是有效的,因为我可以让它在我的结果活动中工作,而不是在Sender类中。
public class Results extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button sendEmail = (Button) findViewById(R.id.resultsEMAIL);
sendEmail.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Sender sender = new Sender();
sender.sendEmail();
}
});
///////
public class Sender{
public void sendEmail(){
Intent sendEmail = new
Intent(Intent.ACTION_SEND_MULTIPLE);
ArrayList<Uri>uris = new ArrayList<Uri>();
uri.add(someUri);
uri.add(otherUri);
sendEmail.setType("message/rfc822");
sendEmail.putExtra(Intent.EXTRA_EMAIL, allEmails);
sendEmail.putExtra(Intent.EXTRA_SUBJECT, "Subject");
sendEmail.putExtra(Intent.EXTRA_TEXT, results);
sendEmail.putParcelableArrayListExtra(Intent.EXTRA_STREAM,uris);
try {
startActivity(Intent.createChooser(sendEmail, "Send")); }
catch
(android.content.ActivityNotFoundException ex)
{ Toast.makeText(context, "There are no email clients installed.", Toast.LENGTH_SHORT).show(); }
}
我尝试从结果
传递上下文Results.context.startActivity(Intent.createChooser(SendEmail,"Send"));
我也试过
sendEmail.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
无论我做什么,我都会得到例外
android.util.AndroidRuntimeException:从Activity上下文外部调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗?
我应该放弃尝试在单独的课程中这样做吗?我想创建一个Sender类来清理结果。
答案 0 :(得分:1)
您需要将活动的上下文传递给sendMail()方法。
public class Results extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button sendEmail = (Button) findViewById(R.id.resultsEMAIL);
sendEmail.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Sender sender = new Sender();
sender.sendEmail(Results.this);
}
});
在sendMail()方法中使用上下文来启动活动。
public void sendEmail(Context context){
Intent sendEmail = new Intent(Intent.ACTION_SEND_MULTIPLE);
//set data to intent
context.startActivity(Intent.createChooser(sendEmail, "Send"));
}