我想在我的onActivityResult方法中检测人是否已发送电子邮件或按下后退按钮或将其丢弃.我怎么能这样做.
我是这样做的
String[] reciepients = result.toArray(new String[result.size()]);
Intent email = new Intent(android.content.Intent.ACTION_SEND);
email.putExtra(android.content.Intent.EXTRA_EMAIL,reciepients);
email.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
email.putExtra(android.content.Intent.EXTRA_TEXT, emailMessage);
email.setType("text/plain");
email.setType("message/rfc822");
Intent intent = Intent.createChooser(email, "Choose Email Client");
//context.start(Intent.createChooser(email, "Choose Email.."));
((Activity)context).startActivityForResult(intent, FinalVariables.SEND_EMAIL);
Run Code Online (Sandbox Code Playgroud)
onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case FinalVariables.SEND_EMAIL:
if(resultCode==Activity.RESULT_CANCELED){
showToast("Cancelled");
}
else if(resultCode==Activity.RESULT_OK){
showToast("Success");
}
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
但这种方式总是让我取消,因为电子邮件客户端永远不会将RESULT设置为RESULT_OK.
那么我怎样才能满足我的要求呢.请建议.
谢谢
在阅读了这个问题的工作人员的语气后,我明白没有办法确切地知道用户是按下"发送"还是刚刚取消.
但有一种方法可以找出至少用户是否已打开任何邮件客户端应用程序或从"使用完整操作"对话框中退回.(在我的情况下,我只想在用户打开邮件客户端时完成活动,如果用户从对话框中按下则不执行任何操作).诀窍很简单.
由于对话框是一个浮动窗口,当它在活动上显示时,只在活动中调用onPause()方法,但是当用户选择了一个邮件客户端并且正在打开时,onStop()方法的活动是也被称为.因此,您可以使用startActivityForResult()启动ACTION_SEND :
startActivityForResult(intent, CODE_SEND);
Run Code Online (Sandbox Code Playgroud)
并且还有一个布尔标志,您将在onPause()和onStop()中更改:
public class MainActivity extends Activity {
...
private boolean mailClientOpened = false;
@Override
protected void onResume() {
super.onResume();
mailClientOpened = false;
}
@Override
protected void onStop() {
super.onStop();
mailClientOpened = true;
}
Run Code Online (Sandbox Code Playgroud)
在你的onActivityResult()中你可以检查requestCode和boolean mailClientOpened来知道客户端是打开还是用户取消了对话框:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == CODE_SEND && mailClientOpened){
finish(); // Or do something else that you need to do when you know that user at least opened the mail client app
}
}
Run Code Online (Sandbox Code Playgroud)
PS我知道这不是问题的确切答案,但我希望这对某人有用.