首页 > 代码库 > 学习笔记5-实现电话拔号器.avi
学习笔记5-实现电话拔号器.avi
创建一个Android项目,并配置界面
设置软件的界面(main.xml)
1. 先将文字添加到strings.xml
<stringname="mobile">请输入手机号</string>
<stringname="button">拨号</string>
然后在(main.xml)使用
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/mobile"/>
2. 添加一个文本输入框
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
3. 添加一个按钮
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/button"/>
run as→Android Application效果图
实现拨号功能
1. 添加按钮的点击事件
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@+id/button"/>
解释:以上标记的表达式作用,在R文件中的id内部类里面添加一个常量(button),并且使用这个常量所使用的值,作为id属性的值。
2. 为文本框添加一个id
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@+id/mobile"/>
3. 在MainActivity.java写相关点击事件代码实现拨号
PS: 在mian.xml里面的控件最终父类都是View。
public class MainActivity extends Activity {
/** Called when the activity is firstcreated. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(new ButtonClickListener());
}
private final class ButtonClickListenerimplements View.OnClickListener {
public void onClick(View arg0) {
EditTextmobileText = (EditText) findViewById(R.id.mobile);
Stringnumber = mobileText.getText().toString();
// 激活电话拨号器的activity,让其为我拨打电话
// new 一个意图对象,意图对象就是我们想做的、想干的事情(拨号)
Intent intent = new Intent();
intent.setAction("android.intent.action.CALL");// 指定动作名称
intent.addCategory("android.intent.category.DEFAULT");// 指定类别
// 把数据放进去,传给对方的电话号码(采用URI)
intent.setData(Uri.parse("tel:" +number));
// 把意图传给操作系统,通过意图激活activity组件
// 方法内部会自动为Intent添加类别,所有上面的类别可以注销
startActivity(intent);
}
}
}
这些代码拨号(android.intent.category.DEFAULT) 源码都可以找到的,源码的Phone的AndroidManifest.xml :项目的清单文件就有。
4. 拨号功能要激活 要申请权限 在AndroidManifest.xml
在manifest节点下
<uses-permissionandroid:name="adnroid.permission.CALL_PHONE"/>
权限的作用:为了保护用户的隐私和安全,当app牵扯到用户隐私和安全的时候,就要求软件出示权限。app在安装的时候,会向用户提示,比如使用到拨号功能,是否同意。(开发环境debug不会提示这些)。
把应用run as Android Application上测试。新建一个模拟器,拨打电话到另外一个模拟器。
功能实现了,是通过调用系统的拨号器来实现的。
性能优化
因为onCreate只会执行一次,所以我们将EditText放到这里,这样每次点击按钮就不用查找了
/** Called when the activity is firstcreated. */
privateEditTextmobileText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mobileText =(EditText) findViewById(R.id.mobile);
Button button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(new ButtonClickListener());
}
private final class ButtonClickListenerimplements View.OnClickListener {
public void onClick(View arg0) {
String number =mobileText.getText().toString();
// 激活电话拨号器的activity,让其为我拨打电话
// new 一个意图对象,意图对象就是我们想做的、想干的事情(拨号)
Intent intent = new Intent();
intent.setAction("android.intent.action.CALL");// 指定动作名称
//intent.addCategory("android.intent.category.DEFAULT");//指定类别
// 把数据放进去,传给对方的电话号码(采用URI)
intent.setData(Uri.parse("tel:" +number));
// 把意图传给操作系统,通过意图激活activity组件
// 方法内部会自动为Intent添加类别,所有上面的类别可以注销
startActivity(intent);
}
}
PS: 在Android中定义内部类加载的性能比外部单独的类好。所以Android源码使用很多内部类。像一个通讯录的源码 就有六千多行代码,大量使用内部类。可读性差。可能他们比较注重性能。
Android查看源码,在sdk→platforms下的对应Android版本下新建sources,把下载的源码放到文件夹。
代码下载:链接:http://pan.baidu.com/s/1pJkcTQz 密码:45cv
学习笔记5-实现电话拔号器.avi