开发环境:

Win XP + eclipse-jee-helios(版本号3.6) + ADT(版本10.0.1) + Android SDK(版本10);

模拟器及真机测试环境:Android2.2

1.软件界面的设计:

Android项目学习笔记之电话拨号器_Android


                                       图1

  •    首先在phone->res->values中的string.xml中添加布局中需要的字符串,string.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>

以键值对的形式出现,如

<string name="app_name">电话拔号器</string>

定义字符串“电话拨号器”的id为“app_name,那么在布局中就可以利用相应的id值来引用字符串。

  • 在phone->res->layout中的main.xml中添加布局的代码,从图1可以看到该布局是垂直线性布局,具体的实现代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <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"
            />
    </LinearLayout>

2.给拨号钮添加点击事件的处理对象

具体的实现思路是这样的:首先根据控件的id在所有的控件中找到拨号button按钮,设置监听,即当点击拨号按钮时,执行相应的拨号操作。

   这里应该注意的是,我们自己编写的代码调用Android手机自带的拨号功能,判断是由哪一个Activity来提供功能的?那么激活这个Activity就可以让其帮我们打电话,要激活它,就需要与这个
Activity自带的意图过滤器匹配,并在清单文件中出示打电话的权限(Android的安全机制)。

  • 在phone->src->cn.hao.phone中的MainActivity.java中添加实现拨号功能按钮的代码,在MainActivity类中定义如下全局变量

    private EditText mobileText;

    在onCreate()方法中添加如下代码

    mobileText = (EditText) findViewById(R.id.mobile);
    Button button = (Button) this.findViewById(R.id.button);
    button.setOnClickListener(new ButtonClickListener());

    方法ButtonClickListener()在onCreate()代的代码如下

    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
            }
        }

3.在清单文件AndroidManifest.xml中出示打电话的权限

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

注意:该权限的声明应该在<application></application>标签的外部。

运行的结果如下:

Android项目学习笔记之电话拨号器_Android_02

利用两个模拟器模拟打电话的结果如下:

Android项目学习笔记之电话拨号器_Android_03

小结:这个程序功能的实现并不是完全由我们自己编写,感兴趣的朋友可以看一下Android手机自带的拨号功能的源代码(至少几万吧),而是我们通过与Android手机自带的拨号功能的意图匹配,并出示相应操作的权限完成的。