【问题标题】:No Activity found to handle Intent while sending email发送电子邮件时未找到处理 Intent 的活动
【发布时间】:2013-01-15 06:02:41
【问题描述】:

我正在尝试通过电子邮件将通过我的应用程序单击的图片作为附件发送。点击图片,我得到了正确的路径,但应用程序抛出了一个运行时异常......“没有找到处理 Intent 的活动”。我正在我的设备上对此进行测试,并配置了我的 gmail 帐户。我不知道如何解决这个问题。请帮忙。

这是我的代码:

public static void sendEmail(Context context, String[] recipientList, String title, String subject, String body) {

Intent intent = new Intent(Intent.ACTION_SENDTO,    Uri.parse("mailto:someone@example.com"));
        intent.setType("plain/text");
        intent.putExtra(android.content.Intent.EXTRA_EMAIL, recipientList);
        intent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
        intent.putExtra(android.content.Intent.EXTRA_TEXT, body);
        intent.putExtra(Intent.EXTRA_STREAM, capturedImageFilePath);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);

}

这是日志:

01-15 11:26:04.455: E/AndroidRuntime(9904): FATAL EXCEPTION: main
01-15 11:26:04.455: E/AndroidRuntime(9904): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SENDTO typ=plain/text flg=0x10000000 (has extras) }
01-15 11:26:04.455: E/AndroidRuntime(9904):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1512)
01-15 11:26:04.455: E/AndroidRuntime(9904):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1384)
01-15 11:26:04.455: E/AndroidRuntime(9904):     at android.app.ContextImpl.startActivity(ContextImpl.java:852)
01-15 11:26:04.455: E/AndroidRuntime(9904):     at android.content.ContextWrapper.startActivity(ContextWrapper.java:276)
01-15 11:26:04.455: E/AndroidRuntime(9904):     at com.example.attachmail.AttchmentActivity.sendEmail(AttchmentActivity.java:133)
01-15 11:26:04.455: E/AndroidRuntime(9904):     at com.example.attachmail.AttchmentActivity$2.onClick(AttchmentActivity.java:93)

【问题讨论】:

  • 尝试添加Intent.FLAG_DEBUG_LOG_RESOLUTION 标志。它可能会帮助您弄清楚。
  • Tried Intent.FLAG_DEBUG_LOG_RESOLUTION 向我抛出以下异常::从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?

标签: android email android-intent


【解决方案1】:

我有一个类似的问题,我已将参数传递给一个函数,该函数会有意地发送电子邮件。 但是我注意到我需要使用intent.setData(Uri uri)行,如果电子邮件参数只是电子邮件,那么它需要使用“mailto:”文本 示例:

intent.setData(Uri.parse("mailto:"+email));

喜欢这里:

Intent intent = new Intent(Intent.ACTION_SENDTO);
                    intent.setType("message/rfc822");
                    intent.putExtra(Intent.EXTRA_EMAIL, email);
                    intent.setData(Uri.parse("mailto:"+email));
                    intent.putExtra(Intent.EXTRA_SUBJECT, emailSubject);
                    intent.putExtra(Intent.EXTRA_TEXT, emailContent);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.addFlags(Intent.FLAG_FROM_BACKGROUND);
                try {

                    startActivity(intent);
                } catch (android.content.ActivityNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    Log.d("Email error:",e.toString());
                }

如果您在模拟器上测试它,可能会出现未配置“共享”应用程序的问题,因此请确保在模拟器上进行设置或在实际设备上进行测试。

【讨论】:

  • 这对我来说似乎不是一个解决方案,我仍然遇到同样的错误。
  • android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SENDTO ...
  • 哦,我想我找到了错误,这个模拟器上没有配置电子邮件应用程序。现在可以了!
  • 在我认为可能是问题的真实设备上测试它。
  • 调用 setData() 会擦除在数据或类型之前设置的任何内容,就像仅供参考
【解决方案2】:

尝试以下代码发送电子邮件。

                   Intent sendIntent = new Intent(Intent.ACTION_SEND);

                    sendIntent.setType("message/rfc822");
                    sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
                   sendIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse(path));

                   sendIntent.putExtra(Intent.EXTRA_TEXT, body);
                   startActivity(Intent.createChooser(sendIntent, "Email:")) 

【讨论】:

  • public static void sendEmail(Context context, String[] recipientList, String title, String subject, String body) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("消息/rfc822"); intent.putExtra(android.content.Intent.EXTRA_EMAIL, recipientList); intent.putExtra(android.content.Intent.EXTRA_SUBJECT,主题); intent.putExtra(android.content.Intent.EXTRA_TEXT, body); intent.putExtra(Intent.EXTRA_STREAM, captureImageFilePath);意图.setFlags(意图.FLAG_ACTIVITY_NEW_TASK); context.startActivity(Intent.createChooser(intent, "Email:")); }
  • 上面的代码向我抛出了这个异常:android.util.AndroidRuntimeException:从 Activity 上下文之外调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?我不明白我已经设置了那个标志。
  • 只需在最后一行使用 startActivity(Intent.createChooser(sendIntent, "Email:")。
  • 如果我删除上下文。它向我抛出编译器错误:: 无法从 Activity 类型对非静态方法 startActivity(Intent) 进行静态引用。我想我应该从方法中删除代码,然后尝试你的建议。
  • 尝试从方法中删除并在没有上下文的情况下使用 startActivity() ..仍然是相同的异常。 :(
【解决方案3】:

将 Intent.ACTION_SENDTO 更改为 Intent.ACTION_SEND。我不想要像蓝牙这样的其他发送选项,这就是我写发送到..但无法让它工作的原因。所以最后把它改成发送,现在它工作得很好。不知道到底是什么问题。

【讨论】:

    【解决方案4】:

    只需从您的代码中删除这一行

     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    

    & 然后再试一次。

    【讨论】:

    • 删除该标志会引发此异常:从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?
    【解决方案5】:

    我认为您面临的问题是因为您设置的 MIME 类型是“纯文本”和您设置的 FLAG,即 FLAG ACTIVITY NEW TASK。

    这里有一些可以帮助你的东西。 试试this 链接或this 链接。

    Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
    //        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, emailSignature);
            emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, toSenders);
            emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subjectText);
            emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, messageText+"\n\n"+emailSignature); 
    
            emailIntent.setType("image/jpeg");
            File bitmapFile = new File(Environment.getExternalStorageDirectory()+
                "/"+FOLDER_NAME+"/picture.jpg");
            myUri = Uri.fromFile(bitmapFile);
            emailIntent.putExtra(Intent.EXTRA_STREAM, myUri);
    

    【讨论】:

    • 我将类型更改为 image/jpeg 并删除了标志。但它向我抛出了这个异常:从 Activity 上下文之外调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?所以我再次设置标志并尝试仅更改内容类型,现在我回到旧的找不到 Intent 异常。
    • 试试“text/plain”,让我知道会发生什么:)
    • 我最初尝试过。没有它抛出的标志,上下文需要标志异常,而使用它抛出的标志我找不到 Intent 异常。 :( :(
    • 查看我更新的答案。我已经添加了一个链接。希望它有所帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2015-03-08
    相关资源
    最近更新 更多