搬运自本人博客:Android学习笔记(1)——电话拨号器
程序的实现过程非常简单,大体分为以下几步:
对于电话拨号器,我们最后的界面大致如下:

对应的布局文件如下,采用的是相对布局。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |     android:layout_width="match_parent"    android:layout_height="match_parent"    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="com.xgezhang.dial.MainActivity">    <EditText        android:id="@+id/et_number"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:inputType="phone">    </EditText>    <Button        android:onClick="dialButtonClicked"        android:id="@+id/bt_dial"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft= "true"        android:layout_below="@+id/et_number"        android:layout_marginTop="10dp"        android:text="@string/dial"        /></RelativeLayout> | 
接下来我们来写对应的java代码,拨打电话这一过程,首先是要提取处et_number里面的值,点击按钮之后要往et_number的号码拨打电话。按钮事件我们可以通过注册内部类,去完成它的接口来实现。注意这里调用的OnClickListener;要是在android.view.View下的,不然会出错。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | package
com.xgezhang.dial;import
android.app.Activity;import
android.content.Intent;import
android.net.Uri;import
android.os.Bundle;import
android.widget.Button;import
android.widget.EditText;import
android.widget.Toast;import
android.text.TextUtils;import
android.view.View;import
android.view.View.OnClickListener;public
classMainActivity extendsActivity implementsOnClickListener {    privateEditText et_number;    @Override    protectedvoidonCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //加载布局文件        setContentView(R.layout.activity_main);        //查找按钮        Button bt_dial = (Button) findViewById(R.id.bt_dial);        //查找文本框        et_number = (EditText) MainActivity.this.findViewById(R.id.et_number);        //  1.创建一个内部类,实现OnClickListener的接口                        bt_dial.setOnClickListener(newMyListener());       }    privateclassMyListener implementsOnClickListener{        /**         * 当按钮被点击时调用的方法         */        @Override        publicvoidonClick(View v) {      
            callPhone();        }    }} | 
接下来我们就需要去实现callPhone()函数了。首先,我们可以判断一下电话号码是否为空,如果为空可以给出提示,Android下的提示通过Toast函数来实现
| 1 2 3 4 5 | String number = et_number.getText().toString();        if(TextUtils.isEmpty(number)) {            Toast.makeText(MainActivity.this,
"号码不能为空", Toast.LENGTH_SHORT).show();            return;        } | 
其中Toast.makeText()有三个参数,第一个为context,这里传递的是MainActivity,第二个参数是提示内容,第三个内容为提示持续的长短时间。分别为Toast.LENGTH_LONG和Toast.LENGTH_SHORT。
接下来我们要传递一个打电话的意图,这里通过Intent来实现:
| 1 2 3 4 | Intent intent = newIntent();        intent.setAction(Intent.ACTION_CALL);        intent.setData(Uri.parse("tel:"+number));        startActivity(intent); | 
其中Intent.ACTION_CALL是一个已经封装好的动作,即拨号,把电话号码字符转化为Uri之后,我们就可以通过开启界面startActivity(intent)完成拨号了。
完整的callPhone()函数如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | private
voidcallPhone() {    // 意图 松耦合  
    String number = et_number.getText().toString();    if(TextUtils.isEmpty(number)) {        Toast.makeText(MainActivity.this,
"号码不能为空", 0).show();                return;    }    Intent intent =
newIntent();    intent.setAction(Intent.ACTION_CALL);    intent.setData(Uri.parse("tel:"+number));    startActivity(intent);} | 
但这还没有结束,我们在使用安卓手机安装app时经常会看到警告,说这个app会拥有系统的一些权限,提示我们是否允许。电话拨号器也是一样的,它也需要拥有拨号的权限。
我们打开AndroidManifest.xml文件,选择Permission->UserPermission,Add一个叫CALL_Phone的permission。

然后就可以了,我们可以打开两个模拟器,用一个给另外一个拨号,模拟器中直接拨打端口号5556即可。查看效果:

欢迎转载,请注明出处。
原文地址:http://blog.csdn.net/u014237185/article/details/44680553