首页 > 代码库 > Android开发系列(一):电话拨号器的实现

Android开发系列(一):电话拨号器的实现

目标,实现简单的电话拨号功能。


首先,可以看到上边有几个控件,上边有几个文字。

在我们建立好了工程之后,我们首先可以在res目录下的values目录的strings.xml中把这几个文字添加进去,为了更好地实现国际化。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, MainActivity!</string>
    <string name="app_name">电话拔号器</string>
    <string name="mobile">请输入手机号</string>
    <string name="button">拔号</string>
</resources>
接下来,我们需要实现这个Activity窗口。可以看出,这个界面中有三个组件:第一行的”请输入手机号“,第二行的手机号文本框,第三行的“拨号”按钮。

所以,我们在res目录下的layout目录的main.xml配置文件中添加这几个组件:

       <TextView  
	    android:layout_width="fill_parent" 
	    android:layout_height="wrap_content" 
	    android:text="@string/mobile"
	    />
	<EditText
		android:layout_width="fill_parent" 
	    android:layout_height="wrap_content"
	    android:id="@+id/mobile"
	    />
	<Button
		android:layout_width="wrap_content" 
	    android:layout_height="wrap_content"
	    android:text="@string/button"
	    android:id="@+id/button"
	    />
做到这里的时候,界面就是已经做好了。


这个时候,我们需要通过java来实现这个拨号器的拨号功能了:

我们需要编写MainActivity.java:

package cn.itcast.phone;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
    private EditText mobileText;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mobileText = (EditText) findViewById(R.id.mobile);//获得文本输入框:通过main中的id为mobile的属性
        Button button = (Button) this.findViewById(R.id.button); //获得Button
        button.setOnClickListener(new ButtonClickListener());//设置点击事件的监听器
    }
 
    private final class ButtonClickListener implements View.OnClickListener{
		public void onClick(View v) { //默认实现方法,当按钮被点击就会被调用
			String number = mobileText.getText().toString(); //通过文本输入框,获得文本输入框的值
			Intent intent = new Intent(); //得到一个意图对象
			intent.setAction("android.intent.action.CALL"); //传递动作名称
			intent.setData(Uri.parse("tel:"+ number)); //传递数据
			startActivity(intent);//方法内部会自动为Intent添加类别:android.intent.category.DEFAULT
		}
    }
}

我们来分析下程序的过程:

首先,调用setContentView(R.layout.main);来获得main窗口,然后通过findViewById(R.id.mobile)获得在main.xml中id为mobile的文本输入框。

接下来,通过findViewById(R.id.button);获得在main.xml中id为button的按钮。

继续,用setOnclickListener(new ButtonClickListener());来设置点击事件的监听器。


再下边,我们需要编写一个ButtonClickListener()类,用final来标记不能够被继承。

在这个类中添加未被实现的方法,当点击的时候会被调用:Onckick(View v)。

在方法中,调用mobileText.getText().toString()来获得文本框输入的手机号码。

然后,通过intent传递拨打电话的动作名称:“android.intent.action.CALL"

通过intent传递数据:intent.setDate(Uri.parse("tel:"+number));

接下来开启intent意图。


因为拨打电话涉及到数据的隐私,所以我们需要在AndroidMainfest.xml中添加一个安全控制:

<uses-permission android:name="android.permission.CALL_PHONE"/>

到了这个时候,一个电话拨号器基本就完成了。




Android开发系列(一):电话拨号器的实现