本测试主要实现了一个Android的拨打电话的功能

一:界面预览

由图中可以看出,这个Activity需要3个控件:TextView、EditText、Button

其实实现一个功能要经过几个步骤:

1,Activity的设置(即界面布局)

由于本功能比较简单,所以只有一个Activity,也即是使用Eclipse创建Android项目时默认创建的main_activity.xml

代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/mobile" />
   
    <EditText
        android:id="@+id/main_activity_phonenumber"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
   
    <Button
        android:id="@+id/main_activity_phonecaller"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="拨号"/>

</LinearLayout>

关于本段代码的解释:

    首先这个Activity的布局为线性布局:LinearLayout,在设置LinearLayout的时候别忘记了orientation属性为vertical

    关于TextView控件,因为它在本例子中只提供了一个显示的功能,所以不用设置其id属性。每一个控件都必须要设置其两个属性:android:layout_width和android:layout_height,关于这两个属性,主要有两个值:fill_parent和wrap_content。fill_parent表明此控件的宽度(或高度)属性为填充满其父窗口,wrap_content指明控件的高度(或宽度)为包围其内容即可,也就是说,此时控件的大小将会根据控件中的内容而改变大小。

    TextView的最后一个属性:android:text用于显示控件上的文字内容。

    到这里你可能会疑惑@string/mobile和@+id/main_activity_phonenumber各是什么意思,@string/表明反斜线后面的变量为字符串类型,其名称为mobile(字符串的键值对在res/values/string.xml中配置)。而@+id/表示反斜线后面的变量为新添加的内容,此时在R.java文件中会自动生成变量名并赋值,所以接下来在MainActivity.java中可以通过R.id.+变量名来获取此控件的ID。

     在控件的属性中还有一个属性非常重要,即android:layout_weight;关于它的详细信息,我会在接下来的博客中讲述,因为在这里我们并没有用到。

 

2.MainActivity的代码编写(如果你的APP使用了多个Activity,即你需要自己创建一个Activity,这时不要忘了在AndroidMainifest.xml文件中添加Activity的注册)

代码如下:

package com.example.phonecaller;

import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends ActionBarActivity {
    private Button button;
    private EditText editText;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        button = (Button) findViewById(R.id.main_activity_phonecaller);
        editText = (EditText) findViewById(R.id.main_activity_phonenumber);
        button.setOnClickListener(new ButtonClickListener());
    }
   
    public final class ButtonClickListener implements View.OnClickListener
    {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String phoneNumber = editText.getText().toString().trim();
            Intent phoneCallIntent = new Intent();
            phoneCallIntent.setAction(Intent.ACTION_CALL);
            phoneCallIntent.setData(Uri.parse("tel:" + phoneNumber));
            startActivity(phoneCallIntent);
        }   
    }
}

本段代码的解释:

本段代码前面的导包的代码不用纳闷,在你使用Eclipse进行开发时,每当你用到某些包中的类时,按下Ctrl+1,Eclipse会自动补全需要加载的包(不用刻意地去学习Eclipse快捷键,在代码编写的过程中,你会逐渐熟悉并掌握这些快捷键的使用)

    MainActivity继承自ActionBarActivity,可能是由于我的Eclipse版本比较新的缘故,很多老版本的会在创建MainActivity时继承自Activity,后来我看了一下代码,ActionBarActivity继承自Activity,所以此处你的MainActivity无论继承哪一个都是可以的。继承ActionBarActivity之后,实现其onCreate方法,在方法内部进行代码功能的实现。

    首先通过findViewById()获得控件的使用权,button.setOnClickListener(new ButtonClickListener());的意思是为这个button添加一个单击事件,此方法的参数为一个对象,此对象实现了View.OnClickListener接口,并在ButtonClickListener类中实现了此接口的onClick()方法。

     在onClick方法中,首先获取editText中的电话号码(trim()方法为去掉字符串两边的空格),接下来创建一个Intent用于调用系统的打电话的功能,phoneCallIntent.setAction方法指明了这个Intent目的是ACTION_CALL,即打电话。setData方法向Intent传递拨号的电话号码,由于setData方法接收的属性为一个Uri,所以此处使用Uri的parse方法将字符串转换为Uri。系统规定的传递给打电话的Intent的电话格式为tel:+phoneNumber。设置好Intent之后,调用startActivity()方法启动此Intent。

注:考虑到代码编写的整洁性,所以我在给button控件添加单击相应事件时没有使用匿名内部类,而是重新编写一个类来View.OnClickListener接口,我看了好多教程都采用匿名内部类的方式来编写代码,但看到一个采用这种方式编写代码的教程,认为这样确实使代码整洁了好多,故采用这种方式,至于读者使用哪种方式,则自行选择,每种方式都有其优缺点。

注意,由于调用系统的拨打电话的功能需要使用系统权限,所以要给此App添加一个用户权限,在AndroidManifest.xml中添加如下代码:

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

最后运行程序:

         

Android学习3—电话拨号器的更多相关文章

  1. Android学习之电话拨号器

    本人自己是做android驱动的,也会接触到系统层.上层的应用,所以在闲暇的时候也就开始了学习android应用的路程,在这里把这些东西记下来,希望自己能坚持下去,也好以后复习用. 今天先实现一个简单 ...

  2. Android实例-使用电话拨号器在移动设备上

    Android实例-使用电话拨号器在移动设备上 源文地址: http://docwiki.embarcadero.com/RADStudio/XE5/en/Mobile_Tutorial:_Using ...

  3. android案例一 电话拨号器

    效果图:   电话拨号器的核心原理:  意图   MainActivity代码:     private EditTest et_number; //加载一个布局 setContentView(R.l ...

  4. Android实例-使用电话拨号器在移动设备上(官方)(XE8+小米2)

    源文地址: http://docwiki.embarcadero.com/RADStudio/XE5/en/Mobile_Tutorial:_Using_the_Phone_Dialer_on_Mob ...

  5. android开发学习---基础知识学习、如何导入已有项目和开发一个电话拨号器

    一.基础知识点学习  1.Android体系结构 如图所示,android 架构分为三层: (1)最底层是linux内核,主要是各种硬件的驱动,如相机驱动(Camera Driver),闪存驱动(Fl ...

  6. Android入门——电话拨号器和四种点击事件

    相对于HelloWorld来说,电话拨号器也是Android的一个入门demo,从这个样例我们要理清楚做安卓项目的思路. 大体分为三步: 1.理解需求,理清思路 2.设计UI 3.代码实现 电话拨号器 ...

  7. Android入门——电话拨号器和4种点击事件

    关于HelloWorld为,电话拨号程序还AndroidA入门demo,从这个样例我们要理清楚做安卓项目的思路. 大体分为三步: 1.理解需求,理清思路 2.设计UI 3.代码实现 电话拨号器 1.  ...

  8. Mono for Android—初体验之“电话拨号器”

    1.Main.axml文件: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmln ...

  9. [Android]电话拨号器开发

    继续今天的Android,经过昨天大体了解了Android开发的一些基本文件结构,今天来做一个电话拨号器! 预期达到的效果 实现过程 首先还是按照昨天第一篇教程,新建一个项目叫PhoneCall的An ...

随机推荐

  1. HW4.31

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  2. Why should i use url.openStream instead of of url.getContent?

    I would like to retrieve the content of a url. Similar to pythons: html_content = urllib.urlopen(&qu ...

  3. 使用GSoap开发WebService客户端与服务端

    Gsoap 编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现, 从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多. 用gsoap开发web service的大致思路 我 ...

  4. PAT 1018. Public Bike Management

    There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...

  5. Lamda和Linq语法对比详细

    本人转载:http://www.cnblogs.com/knowledgesea/p/3897665.html 闲言碎语 近期比较忙,但还是想写点什么,就分享一些基础的知识给大家看吧,希望能帮助一些l ...

  6. JMeter对Oracle数据库进行压力测试

    步骤 (1)复制ORACLE的JDBC驱动JAR包文件(ojdbc14.jar)到JMeter的lib目录下. (2)运行jmeter.bat (3)建立线程组:右键测试计划->添加->T ...

  7. struts2 相关知识

    struts2学习笔记 1.struts.properties struts.properties 是可以不要的!!!因为 struts.xml文件中 有 <constant> 这个节点, ...

  8. 调试php的soapCient

    try { import('@.Ext.xml'); header("Content-Type:text/html; charset=utf-8"); $soap = new So ...

  9. 探索开发跨平台移动App,谈Jquery Mobile 和PhoneGap应用

    随着智能手机等设备的大范围普及,各形各色的移动端软件随之既出.各互联网运营商也都在抢占移动软件的占有率.不惜采用财力进行宣传推广.例如,通过手机淘宝客户端购买物品总比pc端要便宜,360手机助手下载对 ...

  10. Android Studio 2.2 HTTP proxy setting 提示异常

    操作系统 :MacOS 10.11.6 IDE :Android Studio 2.2 Java Version :1.8 异常现象描述: 在给Android Studio 2.2设置代理时,出现警告 ...