0

我正在创建一个应用程序,在此过程的这一部分中,用户点击提交按钮,它将弹出询问他们想要使用哪个电子邮件客户端。OnActivityResult - 如果方法未完成,则不执行代码

当前,当我弹出取消弹出窗口时,它仍然会执行代码,如转到下一个活动并显示吐司消息。我想要的是,如果用户点击取消,它不会执行此操作,但如果他们发送电子邮件(或至少进入电子邮件客户端),则执行该代码。

下面是我当前的代码行:

public class Activity extends AppCompatActivity { 
protected static final int EMAIL_SENT = 0; 

我的意图让所有的电子邮件信息:

Intent email = new Intent(Intent.ACTION_SENDTO); 
    email.setData(Uri.parse("mailto:")); 
    email.putExtra(Intent.EXTRA_EMAIL, TO); 
    email.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.subject, name)); 
    email.putExtra(Intent.EXTRA_TEXT, message); 

    startActivityForResult(Intent.createChooser(email, "Choose an Email client :"),0); 
} 

最后onActivity:

 @Override 
public void onActivityResult(int requestCode, int resultCode, Intent data){ 
    if (requestCode == EMAIL_SENT && resultCode == Activity.RESULT_OK) { 
    }else{ 
      Intent submit = new Intent(this,HomeActivity.class); 
      startActivity(submit); 
      Toast toast = Toast.makeText(getApplicationContext(), "Request Submitted", Toast.LENGTH_LONG); 
      toast.show(); 
    } 
    finish(); 
} 
+0

您没有通过'EMAIL_SENT'的请求的代码。你必须改变这个'startActivityForResult(Intent.createChooser(电子邮件,“选择一个电子邮件客户端:”,EMAIL_SENT);' – Piyush

+0

我认为你错位了* else *块中的行。将它放在* if * block onActivityResult中并尝试? – Raghavendra

+0

我试过这两种方法。把请求代码放在什么都不做。我交换了代码并将它放在if块中,但现在甚至没有进入HomeActivity.class,它只是回到前一个类(名为Selection)并且根本不执行代码。 – Hawkfan69

回答

0

并非所有的活动支持结果返回意图。 特别是如果它是已知的系统活动。 你可以在你的onPause()& onResume()中做一些逻辑来检查数据是否发送(也许通过查询邮件的某个数据库表)。

0

据我了解,你只需要交换你的if-else块:

if (requestCode == EMAIL_SENT && resultCode == Activity.RESULT_OK) 
{ 
    Intent submit = new Intent(this,HomeActivity.class); 
    startActivity(submit); 
    Toast toast = Toast.makeText(getApplicationContext(), "Request Submitted", Toast.LENGTH_LONG); 
    toast.show(); 
} 
else 
{ 

} 
+0

尝试过,现在它根本不执行代码,因为如果我点击取消按钮,甚至无法工作,出于某种原因,它只会在else块中才能工作。 – Hawkfan69