开发环境:
Win XP + eclipse-jee-helios(版本号3.6) + ADT(版本10.0.1) + Android SDK(版本10);
模拟器及真机测试环境:Android2.2
1.软件界面的设计:
图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手机自带的拨号功能的意图匹配,并出示相应操作的权限完成的。