gpt4 book ai didi

java - 使用 Intent 在 Activity 之外发送电子邮件

转载 作者:行者123 更新时间:2023-11-30 00:56:44 24 4
gpt4 key购买 nike

我有一个执行一些计算的 Activity “Results”,以及一个供用户发送包含这些结果的电子邮件的按钮。我创建了一个名为“Sender”的类来完成此操作,但 startActivity 在我的 Sender 类中不起作用。我知道实际 Intent 有效,因为我可以让它在我的结果 Activity 中工作,而不是在 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: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

我应该放弃在单独的类(class)中这样做吗?我想创建一个 Sender 类来清理结果。

最佳答案

您需要将 Activity 的 Context 传递给 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() 方法中使用上下文来启动 Activity 。

    public void sendEmail(Context context){ 
Intent sendEmail = new Intent(Intent.ACTION_SEND_MULTIPLE);

//set data to intent
context.startActivity(Intent.createChooser(sendEmail, "Send"));
}

关于java - 使用 Intent 在 Activity 之外发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40026565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com