4

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

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

谢谢

4

3 回答 3

7

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

但是有一种方法可以至少找出用户是否打开了任何邮件客户端应用程序或从“使用完成操作”对话框中按下。(在我的情况下,如果用户打开邮件客户端,我只想完成活动,如果用户从对话框中按下,则什么也不做)。诀窍很简单。

由于对话框是一个浮动窗口,当它显示在活动上时,活动中仅调用onPause()方法,但是当用户选择邮件客户端并打开它时,活动的onStop()方法是也被调用。所以你可以用startActivityForResult()开始 ACTION_SEND :

startActivityForResult(intent, CODE_SEND);

并且还有一个布尔标志,您将在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和布尔值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
        }
    }

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

于 2014-01-11T18:22:56.830 回答
2

按照这个链接

  • 你不能,这不是 API 的一部分。一旦你按下发送按钮它就会返回,即使它没有发送

不确定,但您得到的是 for RESULT_CANCELED 因为它看起来是默认的,用户没有设置 Result ok 然后它认为 RESULT_CANCELED 并且电子邮件活动从不设置结果 RESULT_OK 所以它需要作为 RESULT_CANCELED 。

  • 您可以通过查看返回的 Intent 数据来检查它,无论是邮件发送还是丢弃都将始终为空。
于 2013-06-14T07:02:06.810 回答
0

这可能会帮助你

String DELIVERED = "SMS_DELIVERED" + serialnum; // Unique ACTION every time
Intent delivered = new Intent(context, MessageStatusReceiver.class);
delivered.setAction(DELIVERED ); // Set action to ensure unique PendingIntent
delivered.putExtra("MsgNum", serialnum);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this,
Integer.parseInt(serialnum), delivered,
PendingIntent.FLAG_ONE_SHOT);

参考: 区分两条不同 SMS 的发送报告

于 2013-06-14T06:50:46.040 回答