021、拨打电话、发送短信和发送邮件

时间:2021-12-31 09:16:00
拨打电话有两个关键:
1、在AndroidManifest.xml中添加用户权限,
 <uses-permission android:name="android.permission.CALL_PHONE"/>

 

2、通过自定义Intent对象,带入“ACTION_CALL”这个关键(ACTION),以及通过Uri.parse()方法将用户输入的电话号码(Data)带入,最后以startActivity()方法完成直接拨打。
示例代码:
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_CALL);
                    intent.setData(Uri.parse("tel:"+phone));
                    startActivity(intent);

 

也可以选用  ACTION_DIAL,则不会直接拨打电话,而是把数据带到拨号界面,可让用户进行编辑或拨打。
也可以调用系统的拨号界面:
                Intent intent = new Intent(Intent.ACTION_CALL_BUTTON);
                startActivity(intent);

 

调用上面代码,则会进入通讯录里面,可点击拨打号码。
 
有关打电话的permission有以下两种:
a、android.permission.CALL_PHONE:允许程序传入电话拨号直接拨号,不需通过用户界面确认。
b、android.permission.CALL_PRIVILEGED:允许程序将电话号码传给拨号程序,需要用户确认后才会拨出号码。
 
 
发送短信:
发送短信的关键程序是通过SmsManager对象的sendTextMessage()方法来完成的,其中sendTextMessage()方法需要传入5个值,依次是收件人地址(String)、发送地址(String)、正文(String)、发送服务(PendingIntent)和送达服务(PendingIntent),其中收件人与正文是不可以为null的。
                PendingIntent intent = PendingIntent.getBroadcast(
                        MainActivity.this, 0, new Intent(), 0);
                SmsManager.getDefault().sendTextMessage(phone, null, conent,
                        intent, null);

  

SmsManager里面有一个公共的方法,divideMessage(String text) ,当字数超过上限时,会自动被拆分成数条短信,返回值为ArrayList类型,再通过sendTextMessage做循环的发送即可。
 
发送邮件:
在Android上发送E-mail是通过其内置的Gmail程序,而非SMTP的Protocol。
需构建Intent来发送E-mail,使用setType()来决定E-mail的格式,使用putExtra()来置入寄件人(EXTRA_E-MAIL)、主题(EXTRA_SUBJECT)、邮件内容(EXTRA_TEXT)以及其他E-mail的字段(EXTRA_CC、EXTRA_BCC)
发送的E-mail的写法比较多,列举其中几种:
1、
                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setType("plain/text");
                intent.putExtra(Intent.EXTRA_EMAIL, new String[] { addressee });
                intent.putExtra(Intent.EXTRA_CC, new String[] { et_transcript
                        .getText().toString() });
                intent.putExtra(Intent.EXTRA_SUBJECT, et_theme.getText()
                        .toString());
                intent.putExtra(Intent.EXTRA_TEXT, et_content.getText()
                        .toString());
                startActivity(Intent.createChooser(intent, getResources()
                        .getString(R.string.str_message)));
2、
                Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"+addressee));
                intent.putExtra(Intent.EXTRA_TEXT, et_content.getText()
                .toString());
                startActivity(intent);
 
3、
                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.putExtra(Intent.EXTRA_EMAIL, new String[] { addressee });
                intent.putExtra(Intent.EXTRA_CC, new String[] { et_transcript
                        .getText().toString() });
                intent.putExtra(Intent.EXTRA_TEXT, et_content.getText()
                        .toString());
                intent.putExtra(Intent.EXTRA_SUBJECT, et_theme.getText()
                        .toString());
                intent.setType("message/rfc822");
                startActivity(Intent.createChooser(intent, getResources()
                        .getString(R.string.str_message)));

 

 
以上是只发送文字E-mail的,若要传送附有文件的E-mail,可以参考下列代码:
                //添加SD卡里的音乐文件作为附件    
                intent.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/foo.mp3");
                intent.setType("audio/mp3");