android - 在 onActivityResult 中检测电子邮件是否已发送

标签 android email

我想在我的 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);

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;
        }

    }

但这种方式总是让我取消,因为电子邮件客户端永远不会将 RESULT 设置为 RESULT_OK。

那么我怎样才能满足我的要求。请提出建议。

谢谢

最佳答案

在阅读了有关此问题的工作人员的语气后,我了解到无法确切知道用​​户是按下了“发送”还是只是取消了。

但有一种方法可以至少查明用户是否打开了任何邮件客户端应用程序或从“使用完成操作”对话框中按下。 (在我的例子中,我只想在用户打开邮件客户端时完成 Activity ,而在用户从对话框中按回时什么也不做)。诀窍很简单。

由于对话框是一个 float 窗口,当它显示在 Activity 上时, Activity 中只调用了onPause()方法,但是当用户选择邮件客户端时,它是正在打开 onStop() Activity 方法也被调用。因此,您可以使用 startActivityForResult() 开始 ACTION_SEND :

startActivityForResult(intent, CODE_SEND);

还有一个 bool 标志,您将在 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;
}

并且在您的 onActivityResult() 中,您可以检查 requestCode 和 bool 值 ma​​ilClientOpened 以了解客户端是否已打开或用户取消了对话框:

@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
        }
    }

附言我知道这不是问题的确切答案,但我希望这对某人有用。

关于android - 在 onActivityResult 中检测电子邮件是否已发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17102578/

相关文章:

java - 如何创建扩展 AsyncTask 的父类(super class)?

java - 使用 Google 视觉 API 裁剪脸部的地标部分

android - 如何检查 Receiver 是否在 Android 中注册?

java - Android 原生应用程序源代码

python - GAE Python - 如何对邮件正文中的特殊字符进行编码?

java - 按钮不创建文件并在按下时显示电子邮件提供商选项菜单

html - 电子邮件模板在 Outlook 应用程序上无法正常工作

android - 如何使 View 在触摸事件时可调整大小

html - 在 Gmail 中控制移动设备上的内联 block 元素大小

php - 使用smtp发送邮件并将其反射(reflect)到电子邮件服务器的 "Sent"文件夹中