Android开发系列(一):电话拨号器的实现_android开发 拨号号码保护-程序员宅基地

技术标签: android开发  layout  Android基础知识学习系列  国际化  Android  textview  

目标,实现简单的电话拨号功能。


首先,可以看到上边有几个控件,上边有几个文字。

在我们建立好了工程之后,我们首先可以在res目录下的values目录的strings.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>
接下来,我们需要实现这个Activity窗口。可以看出,这个界面中有三个组件:第一行的”请输入手机号“,第二行的手机号文本框,第三行的“拨号”按钮。

所以,我们在res目录下的layout目录的main.xml配置文件中添加这几个组件:

       <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"
	    />
做到这里的时候,界面就是已经做好了。


这个时候,我们需要通过java来实现这个拨号器的拨号功能了:

我们需要编写MainActivity.java:

package cn.itcast.phone;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
    private EditText mobileText;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mobileText = (EditText) findViewById(R.id.mobile);//获得文本输入框:通过main中的id为mobile的属性
        Button button = (Button) this.findViewById(R.id.button); //获得Button
        button.setOnClickListener(new ButtonClickListener());//设置点击事件的监听器
    }
 
    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
		}
    }
}

我们来分析下程序的过程:

首先,调用setContentView(R.layout.main);来获得main窗口,然后通过findViewById(R.id.mobile)获得在main.xml中id为mobile的文本输入框。

接下来,通过findViewById(R.id.button);获得在main.xml中id为button的按钮。

继续,用setOnclickListener(new ButtonClickListener());来设置点击事件的监听器。


再下边,我们需要编写一个ButtonClickListener()类,用final来标记不能够被继承。

在这个类中添加未被实现的方法,当点击的时候会被调用:Onckick(View v)。

在方法中,调用mobileText.getText().toString()来获得文本框输入的手机号码。

然后,通过intent传递拨打电话的动作名称:“android.intent.action.CALL"

通过intent传递数据:intent.setDate(Uri.parse("tel:"+number));

接下来开启intent意图。


因为拨打电话涉及到数据的隐私,所以我们需要在AndroidMainfest.xml中添加一个安全控制:

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

到了这个时候,一个电话拨号器基本就完成了。




版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010800530/article/details/39080763

智能推荐

从本地或者网络读取图片,并转换为Bitmap图片_java 读取网页图像到bitmap-程序员宅基地

文章浏览阅读6.6k次。在做android项目时,我们经常需要从本地或者网络读取图片,并转换为Bitmap图片,以便使用,下面是读取本地图片并转换的方法:Java代码 /** * 得到本地或者网络上的bitmap url - 网络或者本地图片的绝对路径,比如: * * A.网络路径: url="http://blog.foreverlov_java 读取网页图像到bitmap

计算机组成原理|多功能ALU设计实验_设计一个具有8种运算功能的32位alu实验总结-程序员宅基地

文章浏览阅读9.8k次,点赞7次,收藏118次。多功能ALU设计实验一、实验目的与要求实验目的:(1)学习多功能ALU的工作原理,掌握运算器的设计方法(2)掌握运用Verilog HDL 进行行为描述与建模的技巧和方法实验要求:本实验要求设计一个具有8种运算功能的32位ALU,并能够产生运算结果的标志:结果为零标志ZF(Zero Flag)、溢出标志OF(Overflow Flag)。ALU通过3根控制线ALU_OP[2:0]..._设计一个具有8种运算功能的32位alu实验总结

iOS开发进阶之列表加载图片-程序员宅基地

文章浏览阅读484次,点赞10次,收藏5次。列表加载图片通常使用UITableView或UICollectionView,由于列表中内容数量不确定并且对于图片质量要求也不确定,所以对于图片加载的优化是很有必要的。

29、基于51单片机智能消防灭火小车 寻光自动红外壁障车设计_灭火小车设计方案-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏16次。智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。智能小车就是其中的一个体现,本次设计的多功能智能灭火避障小车,以STC89C52单片机作为微控制器,设计出一种可以寻找火源(火源以蜡烛模拟)和自动避开障碍物的小车。通过光敏晶体管传感器检测火源信号当检测到火源,小车自动调整姿态,对准火源。灭火电机启动将蜡烛吹灭实现模拟灭火。通过红外光电开关感应控制小车避障行驶。工作状态实时显示在1602液晶上。_灭火小车设计方案

Ubuntu虚拟机总是死机,然后重启就进不去打不开了怎么办_ubuntu卡死之后重启,打不开了-程序员宅基地

文章浏览阅读4.6k次。从网上搜到的方法都解决不了我的问题,分享一点我自己的实在的解决经验:养成保存快照的习惯,比什么方法都靠谱。 即打开VMWare->虚拟机->快照->拍摄快照,简单填写一下你现在做到的程度,然后点击拍摄快照,存一下,养成习惯,每做出些什么东西了,就存一个快照,哪天莫名其妙又死机了,开机又黑屏进不去了,直接用快照恢复到最近的进度继续做就好。..._ubuntu卡死之后重启,打不开了

随便推点

使用python下载加密的流媒体m3u8视频文件,获取电影资源-程序员宅基地

文章浏览阅读273次,点赞3次,收藏8次。Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

在Qt中使用CreateProcess打开命令行并执行命令_qt.createqprocess()-程序员宅基地

文章浏览阅读351次。在Qt应用程序中,执行命令行命令并获取输出结果可以使用QProcess类。现在,我们可以在Qt应用程序中调用这个函数来执行命令行命令并获取输出结果。现在,我们可以在Qt应用程序中调用这个函数来执行命令行命令并获取输出结果。在上面的示例中,我们将命令设置为"dir",这将列出当前目录的内容。在上面的示例中,我们将命令设置为"dir",这将列出当前目录的内容。这样,当我们点击按钮时,程序将执行命令并将输出结果显示在文本编辑器中。这样,当我们点击按钮时,程序将执行命令并将输出结果显示在文本编辑器中。_qt.createqprocess()

java logutil_Java日志组件1---Jdk自带Logger(java.util.logging.Logger)-程序员宅基地

文章浏览阅读216次。最近在看日志的一些东西,发现利用JDK自带的log也可以简单的实现日志的输出,将日志写入文件的过程记录如下:1、新建LogUtil.Java(里面写了几个静态方法,为log设置等级、添加log控制台handler、添加log文件输出handler)packagecn.darkranger.log.logger;importjava.io.IOException;importjava.text.S..._logutil.java

此时不应有 \scala\bin\..\lib\jline-2.14.5.jar_c:\users\dell>scala 此时不应有 \scala\bin\..\lib\jline--程序员宅基地

文章浏览阅读221次。scala安装时,此时不应有 \scala\bin…\lib\jline-2.14.5.jar那是因为安装Scala时,默认安装到Program Files (x86)或者Program Files下,但是这俩个文件夹命名存在空格,这是从新安装,选择没有空格存在的文件夹下面即可。谢谢..._c:\users\dell>scala 此时不应有 \scala\bin\..\lib\jline-2.14.5.jar

本地搭建docker仓库的详细步骤_本地安装docker-程序员宅基地

文章浏览阅读1.7k次。在本地创建一个用于存储Docker镜像的目录,比如 /data/docker-registry。如果需要加速拉取公共镜像,可以配置阿里云或DaoCloud等国内提供的Docker镜像加速器。如果需要在其他机器上访问该私有仓库,则需要配置证书。使用docker tag将本地构建好的镜像打标签,并推送到私有仓库中。在官网下载Docker安装包进行安装,具体操作方式可以参考官方文档。至此,本地Docker仓库搭建完成。配置客户端访问证书(可选)拉取Registry镜像。启动Registry容器。_本地安装docker

Docker 停止容器_docker停止运行中的容器-程序员宅基地

文章浏览阅读2w次。使用docker stop停止一个容器docker stop可以用来终止一个正在运行的容器。它的命令格式如下:docker stop [OPTIONS] Container [Container …]其中:docker stop: Docker停止容器的命令关键词;OPTIONS:命令选项,其中-t指定等待多少秒后如果容器还没终止,就强行停止,默认等待10秒;Container:需要启动的容器,该容器用“容器ID”或“容器名”表示,如果指定了多个容器,那么就将这些容器都启动。例如想要停止一个名_docker停止运行中的容器