手机自带了电话拨号器,为什么我们还要开发电话拨号器
1 按照需求,当我们开发个交友程序 要在旁边拨打电话联系 某个人的时候就需要输入电话号码 进行拨打
2 熟悉了解电话拨号器的实现过程,对部分源码进行解读
新建android的项目
在主界面布局layout-->main.xml中实现电话拨打的界面
电话拨打的界面由三部分组成 提示文字:请输入电话号码 输入电话的文本框 拨打按钮组成
代码解释
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.itcast.myphone"
android:versionCode="1"
android:versionName="1.0">
versioncode 开发应用的版本号 versionName开发应用的版本名字
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MianAcitivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
android:name=".mainAciivity"表示所对应的activity .可以省略 当不在包cn.itcast.myphone下 在其子包 .不能省略 label 显示应用的名字 可以任意修改
<uses-sdk android:minSdkVersion="8" />
这个表示支持的最低sdk的版本
Layout--》mian.xml解释
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
这个不总做解释 有点编程经验的 都可以看懂
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button"
android:id="@+id/button"
/>
这个里面要解释的是android:id="@+id/button"
表示在R文件生成一个静态类,并在静态类中生成一个button的静态常量
显示activity的布局界面完成,要给拨打电话的按钮提供id ,输入电话的文本框也要提供id,供获取电话号码使用
在我们创建的MainActivty中就可以通过id获取 按钮
this.findViewById(R.id.Button);
其返回对象为view 我们查看view是个接口,图形组建都实现了view接口 所以我们在这定义成Button
并为button 添加设置事件 button.setOclickListener(..);这个方法里面接受一个OnclickListener 的事件,OnclickListener是个接口,我们编写个内部类实现这个接口并添加未实现的方法onClick 改方法返回的是一个view对象,我们可以想象当我们拨打电话在点击拨打按钮后,是切换到另一个界面即是这边的返回的view.
按钮时间有了,我们怎么拨打电话呢 可以查看android自带的拨打电话的源码
platforms\android-8\sources\Phone在这个位置就可以找到 进入应用清单:AndroidMainfest.xml
<activity android:name="OutgoingCallBroadcaster"
android:permission="android.permission.CALL_PHONE"
android:theme="@android:style/Theme.NoDisplay"
android:configChanges="orientation|keyboardHidden">
<!-- CALL action intent filters, for the various ways
of initiating an outgoing call. -->
<intent-filter>
<action android:name="android.intent.action.CALL" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
里面有个意图拦截器,android意图是激活组件的意思。经过分析 我们只要实现android的第一个衣服拦截器中的aciton data 还有category 就可以实现打电话的功能。
在oncreate方法中 创建意图对象 intent 设置其action属性 和 data属性,data里面接受一个uri 在这里我们用强转字符串传入电话号码:uri.parse("tel:"+phonenum); tel拨打电话的协议
category属性我们并可以不显示的设置,当我们调用startAcivity的时候就程序自动设置category属性
部署测试 发现有问题
因为我们安装的程序没有安全提示
所以在程序清单中加入安全权限,当安装程序的时候就会有提示,提示用户是否安装
<android:name="android.permission.CALL_PHONE"/>
查看模拟器的sd卡,在当前用户目录下就可以找到