Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android.content.ActivityNotFoundException using Intent

I am writing an app in which i am trying to send an email with some data, but whenever i do click on Submit button to send an email, getting : Unfortunately App has Stopped

Error:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SEND typ=text/plain (has extras) }

Code:

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)
like image 602
Sneha Avatar asked Aug 01 '13 08:08

Sneha


3 Answers

Few months ago i was facing same problem, and i found a small solution, please try below code by replacing yours

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

If you will get There are no email applications installed. message, it means your work is done and i will suggest you to check it on real DEVICE, but i also don't know how to send it via EMULATOR

like image 89
Android Avatar answered Nov 16 '22 22:11

Android


The Android emulator seems to lack a configured email account. That's why your code crashes. I'd suggest catching an ActivityNotFoundException when trying to send:

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
}

You can get more information on this issue here.

Especially this paragraph is interesting:

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.

like image 26
FD_ Avatar answered Nov 17 '22 00:11

FD_


Instead of using Try-Catch block you can use resolveActivity() method on your Intent object. If the result is non-null, then there is at least one app that can handle the intent and it's safe to call startActivity(). If the result is null, you should not use the intent and, if possible, you should disable the feature that issues the intent.

You can use below solution:

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

You can find more details here.

I hope it helps.

like image 24
Rajesh Avatar answered Nov 17 '22 00:11

Rajesh