美文网首页Android开发
Android发送邮件和短信的方式

Android发送邮件和短信的方式

作者: 念念不忘_2016 | 来源:发表于2018-03-03 17:32 被阅读0次

    转自http://blog.csdn.net/a123473915/article/details/52681173

    发送邮件

    Android应用开发中,很多情况下免不了要调用手机上的邮件类应用,实现邮件发送的功能,这一般是通过调用系统已有的Intent来实现的。看到网上很多邮件发送都是调用action为android.content.Intent.ACTION_SEND的Intent来实现的,下面我们就来看下这种方式实现的效果如何。

    【使用Intent.ACTION_SEND方式】

    具体的UI搭建我就不说了,很easy,直接看下发送的核心代码就行:

     String[] email = {"3802**92@qq.com"}; // 需要注意,email必须以数组形式传入  
     Intent intent = new Intent(Intent.ACTION_SEND);  
     intent.setType("message/rfc822"); // 设置邮件格式
     intent.putExtra(Intent.EXTRA_EMAIL, email); // 接收人  
     intent.putExtra(Intent.EXTRA_CC, email); // 抄送人  
     intent.putExtra(Intent.EXTRA_SUBJECT, "这是邮件的主题部分"); // 主题  
     intent.putExtra(Intent.EXTRA_TEXT, "这是邮件的正文部分"); // 正文  
     startActivity(Intent.createChooser(intent, "请选择邮件类应用"));  
    

    上面代码的效果如下图所示,将会拉起不止邮件类应用,这是很坑爹的事情,用户体验相当差。

    image

    从上面结果可以看出,ACTION_SEND不是首选的方案,更好的方案是能够过滤非邮件类应用,只识别邮件类应用。这可以通过使用另外一个action来实现的。

    【使用Intent.ACTION_SENDTO方式】

    核心代码如下:

     // 必须明确使用mailto前缀来修饰邮件地址,如果使用   intent.putExtra(Intent.EXTRA_EMAIL, email),结果将匹配不到任何应用  
     Uri uri = Uri.parse("mailto:3802**92@qq.com");   
     String[] email = {"3802**92@qq.com"};  
    Intent intent = new Intent(Intent.ACTION_SENDTO, uri);  
    intent.putExtra(Intent.EXTRA_CC, email); // 抄送人  
     intent.putExtra(Intent.EXTRA_SUBJECT, "这是邮件的主题部分"); // 主题  
     intent.putExtra(Intent.EXTRA_TEXT, "这是邮件的正文部分"); // 正文  
     startActivity(Intent.createChooser(intent, "请选择邮件类应用"));  
    

    效果图如下所示:

    image

    当手机上只有一个匹配的邮件类应用时,系统将不会弹出ChooserActivity,供用户从候选的应用中挑选一个,而是直接跳转到匹配的那个应用去。这时查看Eclipse的logcat可以发现,出现如下异常信息:

    image

    但是,当系统中存在多于一个的匹配应用时,会弹出ChooserActivity,让用户选择一个应用发送邮件,这时查看logcat不会出现之前的异常。这又是为何呢?

    【ChooserActivity的bug】

    从异常信息中可以看出,代码在某个地方注册了IntentReceiver,但却没有代码去解除注册。具体原因是Android源码的一个bug,但不影响正常功能,因此可忽略之。想知道详细原因的可以自己查看Android源码。下图是stackoverflow上面的解答,可参考之。

    image

    网址:

    http://stackoverflow.com/questions/10068954/why-does-intent-createchooser-need-a-broadcastreceiver-and-how-to-implement/10290486#10290486

    发送短信

    核心代码如下
    /**
    * 调起系统发短信功能
    * @param phoneNumber
    * @param message
    */
    public void doSendSMSTo(String phoneNumber,String message){
    if(PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber)){
    Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+phoneNumber));
    intent.putExtra("sms_body", message); //短信内容
    startActivity(intent);
    }
    }

    相关文章

      网友评论

        本文标题:Android发送邮件和短信的方式

        本文链接:https://www.haomeiwen.com/subject/tmxxfftx.html