我正在编写一个应用程序,我正在尝试发送包含一些数据的电子邮件,但每当我点击“提交”按钮发送电子邮件时,获取:不幸的是应用已停止
错误:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SEND typ=text/plain (has extras) }
代码:
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/plain");
String aEmailList[] = { "myaccount@gmail.com" };
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, aEmailList);
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml(body.toString()));
startActivity(emailIntent);
logcat的:
08-01 08:34:22.518: E/AndroidRuntime(1043): FATAL EXCEPTION: main
08-01 08:34:22.518: E/AndroidRuntime(1043): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SENDTO typ=text/plain (has extras) }
08-01 08:34:22.518: E/AndroidRuntime(1043): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1622)
08-01 08:34:22.518: E/AndroidRuntime(1043): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1417)
08-01 08:34:22.518: E/AndroidRuntime(1043): at android.app.Activity.startActivityForResult(Activity.java:3370)
08-01 08:34:22.518: E/AndroidRuntime(1043): at android.app.Activity.startActivityForResult(Activity.java:3331)
08-01 08:34:22.518: E/AndroidRuntime(1043): at android.app.Activity.startActivity(Activity.java:3566)
08-01 08:34:22.518: E/AndroidRuntime(1043): at android.app.Activity.startActivity(Activity.java:3534)
08-01 08:34:22.518: E/AndroidRuntime(1043): at app.my.BookAppointmentActivity$6.onClick(BookAppointmentActivity.java:206)
08-01 08:34:22.518: E/AndroidRuntime(1043): at android.view.View.performClick(View.java:4204)
08-01 08:34:22.518: E/AndroidRuntime(1043): at android.view.View$PerformClick.run(View.java:17355)
08-01 08:34:22.518: E/AndroidRuntime(1043): at android.os.Handler.handleCallback(Handler.java:725)
08-01 08:34:22.518: E/AndroidRuntime(1043): at android.os.Handler.dispatchMessage(Handler.java:92)
08-01 08:34:22.518: E/AndroidRuntime(1043): at android.os.Looper.loop(Looper.java:137)
08-01 08:34:22.518: E/AndroidRuntime(1043): at android.app.ActivityThread.main(ActivityThread.java:5041)
08-01 08:34:22.518: E/AndroidRuntime(1043): at java.lang.reflect.Method.invokeNative(Native Method)
08-01 08:34:22.518: E/AndroidRuntime(1043): at java.lang.reflect.Method.invoke(Method.java:511)
08-01 08:34:22.518: E/AndroidRuntime(1043): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-01 08:34:22.518: E/AndroidRuntime(1043): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-01 08:34:22.518: E/AndroidRuntime(1043): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:6)
几个月前,我遇到了同样的问题,我发现了一个小解决方案,请在下面的代码中替换你的
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("plain/text");
i.putExtra(Intent.EXTRA_EMAIL, new String[]{"recepient@gmail.com"});
i.putExtra(Intent.EXTRA_SUBJECT, subject);
i.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(body.toString()));
try {
startActivity(i);
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(Activity.this, "There are no email applications installed.", Toast.LENGTH_SHORT).show();
}
}
如果您将没有安装电子邮件应用程序。消息,这表示您的工作已完成,我建议您在真实设备上查看,但我也不知道如何通过EMULATOR
发送答案 1 :(得分:4)
Android模拟器似乎缺少已配置的电子邮件帐户。这就是你的代码崩溃的原因。我建议在尝试发送时捕获一个ActivityNotFoundException:
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/plain");
String aEmailList[] = { "myaccount@gmail.com" };
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, aEmailList);
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml(body.toString()));
try{
startActivity(emailIntent);
} catch (ActivityNotFoundException ex){
Toast.makeText(this, "No activity found", Toast.LENGTH_LONG).show(); //Display an error message
}
您可以获得有关此问题的更多信息here。
特别是这一段很有意思:
如果您使用的是模拟器,则需要配置电子邮件 客户。如果未配置电子邮件客户端,则不会响应 我们将要讨论的意图。如果你想看到选择器 操作,您需要使用多个消息传递配置设备 应用程序,例如Gmail应用程序和电子邮件应用程序。
答案 2 :(得分:1)
您可以在Intent
对象上使用resolveActivity()方法,而不是使用Try-Catch块。如果结果为非null,则至少有一个应用程序可以处理意图,并且可以安全地调用startActivity()
。如果结果为null,则不应使用intent,如果可能,应禁用发出intent的功能。
您可以使用以下解决方案:
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/plain");
String aEmailList[] = { "myaccount@gmail.com" };
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, aEmailList);
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml(body.toString()));
// Verify that the intent will resolve to an activity
if (emailIntent.resolveActivity(getPackageManager()) != null) {
startActivity(sendIntent);
}else{
Toast.makeText(this, "No activity found to send mail.", Toast.LENGTH_LONG).show();
}
您可以找到更多详情here。
我希望它有所帮助。