Android通信(拨号、发短信、发邮件)
今天学习了安卓通信的内容,我们可以编写程序来调用系统的内置的API很容易就实现一些系统的自带的功能。下面讲一讲自己的实现过程。
首先是首页main_activity的的设计:

首页的功能主要有数字按键、添加联系人按键、拨号按键、发短信按键、发邮件按键。数字按键主要通过图片按钮添加背景图来实现,每个数字按键绑定一个数字,例如0,利用 android:tag="0"语句来绑定,获取数字0的时候就利用语句text=btnDigital.getTag().toString();来获取数字。
然后说说布局,通过这次的设计让我对于布局有了进一步的了解,前两天对于布局都是利用直接拖动按钮来编写的,然后一知半解的,现在至少能懂怎么用了,特别是熟悉了表格布局。

如上图,页面的布局主要是利用表格的布局来实现数字的排版,然后表格里面还通过TableRow来分行,其实现代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="82dp"
android:ems="10"
android:background="#ffffffff"
android:textSize="40sp"
android:textStyle="bold"
android:textColor="#ff333333" >
<requestFocus />
</EditText>
<TableLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
>
<TableRow
android:id="@+id/TableRow04"
android:layout_width="110dp"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/ImageButton01"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/n1"
android:tag="1" />
<ImageButton
android:id="@+id/ImageButton02"
android:layout_width="100dp"
android:layout_height="70dp"
android:src="@drawable/n2"
android:onClick="digital_click"
android:tag="2"/>
<ImageButton
android:id="@+id/ImageButton03"
android:layout_width="100dp"
android:layout_height="70dp"
android:src="@drawable/n3"
android:onClick="digital_click"
android:tag="3" />
</TableRow>
<TableRow
android:id="@+id/TableRow03"
android:layout_width="100dp"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/ImageButton4"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/n4"
android:tag="4" />
<ImageButton
android:id="@+id/ImageButton5"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/n5"
android:tag="5" />
<ImageButton
android:id="@+id/ImageButton06"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/n6"
android:tag="6"/>
</TableRow>
<TableRow
android:id="@+id/TableRow02"
android:layout_width="100dp"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/ImageButton07"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/n7"
android:tag="7"/>
<ImageButton
android:id="@+id/ImageButton08"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/n8"
android:tag="8" />
<ImageButton
android:id="@+id/ImageButton09"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/n9"
android:tag="9" />
</TableRow>
<TableRow
android:id="@+id/TableRow01"
android:layout_width="100dp"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/ImageButton10"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/n10"
android:tag="*"/>
<ImageButton
android:id="@+id/ImageButton11"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/n11"
android:tag="0"/>
<ImageButton
android:id="@+id/ImageButton12"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/n12"
android:tag="#" />
</TableRow>
</TableLayout>
<LinearLayout
android:layout_width="300dp"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.23"
android:onClick="newPeople"
android:background="@drawable/people" />
<ImageButton
android:id="@+id/dialer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1.17"
android:onClick="dial"
android:background="@drawable/callpeople"
/>
<ImageButton
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="delete"
android:background="@drawable/delete" />
</LinearLayout>
<LinearLayout
android:layout_width="300dp"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/msg"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/msg" />
<ImageButton
android:id="@+id/email"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="200dp"
android:onClick="sendEmail"
android:src="@drawable/email" />
</LinearLayout>
</LinearLayout>
主要功能的实现步骤如下:
1.按键的时候调用函数添加号码:
//按键之后执行的动作
public void digital_click(View view){
ImageButton btnDigital=(ImageButton) view;
String text=btnDigital.getTag().toString();
currentNum.append(text);//currentNum是StringBuffer来存号码
display();//调用函数显示号码
}
//显示栏显示号码的函数
public void display(){
textResult.setText(currentNum.toString());
}2.按下拨号键的时候调用系统的API进行拨号:
//拨打功能调用函数
public void dial(View view) {
EditText text=(EditText)findViewById(R.id.editText1);
String number=text.getText().toString();
Intent intent = new Intent();
intent.setAction(intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);//方法内部会自动为Intent添加类别: android.intent.category.DEFAULT
}tip:在调用系统的拨号功能需要添加拨号的权限,我们需要在Androidmanifest里面添加如下语句:
<uses-permission
android:name="android.permission.CALL_PHONE"/>3.添加联系人:
//新建联系人
public void newPeople(View view){
//接口
Intent it = new Intent(Intent.ACTION_INSERT,Uri.withAppendedPath(Uri.parse("content://com.android.contacts"),"contacts" ));
it.setType("vnd.android.cursor.dir/person");
String number = textResult.getText().toString();
it.putExtra(android.provider.ContactsContract.Intents.Insert.SECONDARY_PHONE,number);
startActivity(it);
}4.删除号码数字删除键的函数:
//删除键的功能
public void delete(View view){
if(currentNum.length()>=1){
currentNum.delete(currentNum.length()-1, currentNum.length());
}
if(currentNum.length()==0){
Toast toast=Toast.makeText(this,"请输入号码",100);
toast.show();
display();
}
textResult.setText(currentNum);
}5.短信和邮件的页面跳转实现:
msg=(ImageButton)findViewById(R.id.msg);
msg.setOnClickListener(new OnClickListener(){
public void onClick(View v)
{
Intent it = new Intent();
it.setClass(MainActivity.this, msg.class);
MainActivity.this.startActivity(it);
}
});
email=(ImageButton)findViewById(R.id.email);
email.setOnClickListener(new OnClickListener(){
public void onClick(View v)
{
Intent it = new Intent();
it.setClass(MainActivity.this, email.class);
MainActivity.this.startActivity(it);
}
});6.设计短信页面和邮件;
7.短信的功能的实现:
public class msg extends Activity {
private EditText tel=null;
private EditText content=null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.msg);
this.tel=(EditText)super.findViewById(R.id.tel);
this.content=(EditText)super.findViewById(R.id.content);
}
public void send(View view){
String telMsg=msg.this.tel.getText().toString();
String contentMsg=msg.this.content.getText().toString();
Uri uri=Uri.parse("smsto:"+telMsg);//接收人手机
Intent it=new Intent();
it.setAction(Intent.ACTION_SENDTO);//指定action,我要发短信
it.putExtra("sms_body", contentMsg);//设置信息内容
it.setType("vnd.android-dir/mms-sms") ;//设置MIME类型
it.setData(uri);//设置数据,要去的地方
msg.this.startActivity(it);
}
} 最后的结果:
当我们点击发送的时候调用函数,系统会跳到你的发短信页面,内容都会写好在短信里面。

8.发邮件功能实现:
public class email extends Activity {
private EditText rec=null;
private EditText subject=null;
private EditText emailText=null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.email);
this.rec=(EditText)super.findViewById(R.id.receive);
this.subject=(EditText)super.findViewById(R.id.subject);
this.emailText=(EditText)super.findViewById(R.id.emailText);
}
public void sendEmail(View view){
String recMsg=email.this.rec.getText().toString();
String contentMsg=email.this.emailText.getText().toString();
String subjectMsg=email.this.subject.getText().toString();
Intent emailIntent = new Intent(Intent.ACTION_SEND) ;
emailIntent.setType("plain/text") ; // 设置类型
String address[] = new String[] {recMsg} ;
emailIntent.putExtra(Intent.EXTRA_EMAIL, address) ;//邮件地址
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subjectMsg) ;
emailIntent.putExtra(Intent.EXTRA_TEXT, contentMsg) ;
startActivity(emailIntent); // 执行跳转
}} 
输入相关内容的时候,点击发送,用手机的邮件app打开就会有相关内容。
以上就是今天所做的所有内容,学会了怎么调用系统的API来实现通信功能,只要知道了相关的接口,实现相关功能总的来说还是比较简单的。