2013-08-01 3 views
4

Я пишу приложение, в котором я пытаюсь отправить по электронной почте с некоторыми данными, но всякий раз, когда я этого нажмите на кнопку Отправить, чтобы отправить по электронной почте, получать: К сожалению App Остановилосьandroid.content.ActivityNotFoundException с помощью Intent

Ошибка:

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[] = { "[email protected]" }; 
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

Тестирование в эмуляторе или устройстве? –

+0

@ TheReader in Emulator – Sneha

+0

Попробуйте протестировать устройство, если это возможно. –

ответ

6

Несколько месяцев назад я столкнулся такая же проблема, и я нашел небольшое решение, пожалуйста, попробуйте ниже код, заменив ваш

Intent i = new Intent(Intent.ACTION_SEND); 
    i.setType("plain/text"); 
    i.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"}); 
    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(); 
    } 
} 

Если вы будете get Установок электронной почты не установлено. сообщение, это означает, что ваша работа выполнена, и я предлагаю вам проверить это на реальном УСТРОЙСТВЕ, но я также не знаю, как отправить его через EMULATOR

+0

Что делать, если мне нужно отправить электронную почту через эмулятор. – Sneha

+0

. Чтобы настроить электронную почту в эмуляторе, используйте эту ссылку: - http: //www.androidaspect.com/2012/06/how-to-send-email-from-android-emulator.html – Android

+0

благодарит много ... MR. KLAMITSURI @klamitsuri я не могу принять ответ дважды, моя неудача, счастливая сейчас :) – Sneha

4

Андроида эмулятор, кажется, не хватает сконфигурированный учетной записи электронной почты. Вот почему ваш код падает. Я предлагаю ловить ActivityNotFoundException при попытке отправить:

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
emailIntent.setType("text/plain"); 
String aEmailList[] = { "[email protected]" }; 
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.

Особенно этот пункт интересно:

If you are using an emulator, you’ll need to configure the email client. If the email client is not configured, it will not respond to the Intent we’ll be discussing. If you want to see the chooser in action, you’ll need to configure a device using multiple messaging applications, such as the Gmail application and the Email application.

+0

Из вашего LogCat, похоже, вы используете android.intent.action.SENDTO. Это требует, чтобы вы указывали получателей и субъектов через схему URL-адресов, тогда как android.content.Intent.ACTION_SEND (как вы используете его в вашем опубликованном коде?!) Принимает эти параметры как дополнительные. См. Это для получения дополнительной информации: http://stackoverflow.com/a/8284804/1691231 –

+0

он открывает новое электронное письмо для использования, пустое письмо – Sneha

+0

Какое действие вы используете для своего 'намерения'? –

1

Вместо использования блока Try-Catch вы можете использовать метод resolveActivity() на ваш Intent объект. Если результат не является нулевым, то есть хотя бы одно приложение, которое может обрабатывать намерение, и безопасно позвонить startActivity(). Если результат равен нулю, вы не должны использовать намерение, и, если возможно, вы должны отключить функцию, которая выдает намерение.

Вы можете использовать ниже решения:

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
emailIntent.setType("text/plain"); 
String aEmailList[] = { "[email protected]" }; 
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.

Надеюсь, это поможет.