意图在2.3.3之前的Android API级别的setType("message/rfc822")

isa*_*ent 4 email android android-emulator android-intent

我有一个设置类型"message/rfc822"的问题,意图在Android模拟器上发送带有文件附件的电子邮件.我必须使用setType("message/rfc822"),因为文件没有标准的MIME类型(sqlite数据库),我试图避免选择列表中的很多应用程序供用户选择.对于2.3.3之前的所有API级别,我有一个错误:

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) }
Run Code Online (Sandbox Code Playgroud)

在API Level 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);
Run Code Online (Sandbox Code Playgroud)

Com*_*are 9

首先,"为了避免选择列表中的很多应用程序供用户选择",请使用ACTION_SENDTO和a mailto: Uri.

其次,您所遇到的不是"Android模拟器的问题",也不是"旧的API".您需要1个以上能够处理ACTION_SEND Intent和MIME类型的应用程序message/rfc822.无法保证任何给定设备都支持该组合,更不用说任何给定的仿真器了.您的代码需要处理它,就像您使用ACTION_GOBBLEDYGOOK或MIME类型thisis/sonotreal或其他.

  • @isabsent:您是否愿意使用位于本页右上角的搜索框? (10认同)
  • 你愿意为"ACTION_SENDTO和mailto:Uri"提供一些例子吗? (6认同)