Намерение с setType ("message / rfc822") для уровня API Android до 2.3.3 - PullRequest
3 голосов
/ 26 ноября 2011

У меня проблема с типом настройки "message / rfc822" для намерения отправить электронную почту с вложенным файлом в эмуляторе Android . Я должен использовать setType ("message / rfc822"), потому что файл не имеет стандартного MIME-типа (база данных sqlite), и я стараюсь избегать большого количества приложений в списке выбора по выбору пользователя. Для всех уровней API до 2.3.3 У меня есть ошибка:

java.lang.RuntimeException: 
Unable to start activity ComponentInfo{my.cashwatcher/my.cashwatcher.SendEmailActivity}: 
android.content.ActivityNotFoundException: 
No Activity found to handle Intent { act=android.intent.action.SEND typ=message/rfc822 
(has extras) }

В случае API уровня 2.3.3 код работает нормально и ошибки не появляется. Это проблема эмулятора Android или старых API!?

Код:

Intent sendIntent = new Intent(Intent.ACTION_SEND);                         
sendIntent.setType("message/rfc822");            
sendIntent.putExtra(Intent.EXTRA_EMAIL , new String[]{appPrefs.getEmail("email")});                   
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), DATABASE_PATH)));
sendIntent.putExtra(Intent.EXTRA_TEXT, "body_of_email"); 
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "APPLICATION_NAME");
startActivityForResult(sendIntent, EMAIL_SEND_RESULT);

Ответы [ 3 ]

8 голосов
/ 26 ноября 2011

Во-первых, «чтобы избежать множества приложений в списке выбора по выбору пользователя», используйте ACTION_SENDTO и mailto: Uri.

Во-вторых, то, что вы испытываете, это не «проблема эмулятора Android» и не «старые API». Вам нужны приложения 1+, способные обрабатывать ACTION_SEND Intent и MIME-тип message/rfc822. Нет никакой гарантии, что любое устройство будет поддерживать эту комбинацию, не говоря уже о любом эмуляторе. Ваш код должен обрабатывать это, как если бы вы использовали ACTION_GOBBLEDYGOOK или MIME-тип thisis/sonotreal или что-то еще.

2 голосов
/ 21 июля 2015

Я сделал приложение, которое использует пример URI, как вы и пожелали: в моей функции активирован прослушиватель кликов :

if(v.getId()==R.id.button3)
{
    intent=new Intent(Intent.ACTION_SEND);
    intent.setData(Uri.parse("mailto"));
    String[]to={"akshkatheria@gmail.com","megakatheria@gmail.com"};
    intent.putExtra(Intent.EXTRA_EMAIL, to);
    intent.putExtra(Intent.EXTRA_SUBJECT, "hello");
    intent.putExtra(Intent.EXTRA_TEXT, "hi");
    intent.setType("message/rfc822");
    chooser=intent.createChooser(intent, "send mail");
    startActivity(chooser);

}

0 голосов
/ 16 октября 2015

Это решение.Используйте приведенный ниже код, отлично работает ... Получил решение после исследования ....:)

Intent testIntent = new Intent(Intent.ACTION_VIEW);  

Uri data = Uri.parse ("mailto:? Subject =" + "бла-бла, тема "+" & body = "+" бла-бла, тело "+" & to = "+" sendme@me.com ");
testIntent.setData (data);
startActivity (testIntent);

...