android 开发 短信,Android开发之短信发送

今天要讲的是使用Android开发发送短信程序。我们先来看下运行效果

0818b9ca8b590ca3270a3433284dd417.png   

0818b9ca8b590ca3270a3433284dd417.png

图(1)                                                                                   图(2)

0818b9ca8b590ca3270a3433284dd417.png

图(3)

图(1):当我们运行项目时,出现在屏幕的效果;

图(2):当我们输入错误格式的电话号码时,出现在屏幕的效果图;

图(3):当我们输入格式正确时,短信发送成功的效果。

下面,来讲解该项目的开发过程。

1、创建一个Android项目,这里命名为SendMessage。

2、修改程序的布局文件main.xml内容。具体代码如下:

android:id="@+id/widget1"

android:background="@drawable/white"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

xmlns:android="http://schemas.android.com/apk/res/android"

>

android:id="@+id/widget27"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/str_textview"

android:textSize="16sp"

android:layout_x="0px"

android:layout_y="12px"

>

android:id="@+id/myEditText1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text=""

android:textSize="18sp"

android:layout_x="60px"

android:layout_y="2px"

>

android:id="@+id/myEditText2"

android:layout_width="fill_parent"

android:layout_height="223px"

android:text=""

android:textSize="18sp"

android:layout_x="0px"

android:layout_y="52px"

>

android:id="@+id/myButton1"

android:layout_width="162px"

android:layout_height="wrap_content"

android:text="@string/str_button1"

android:layout_x="80px"

android:layout_y="302px"

>

3、修改values目录下的string.xml文件,并在该目录下新建一个color.xml文件,具体代码如下:

string.xml:

SendMessage

发送

收件人

color.xml:

#808080

#FFFFFF

#0000FF

这里说一下,为什么我们要新建color.xml文件,因为我们布局文件中要用到。大家可能已经发现,我们运行效果图的背景颜色不是黑色而是白色,系统默认情况下,背景是黑色,这里我们使用color.xml文件来修改背景颜色。

4、修改主程序,MyActivity.java,该文件的具体代码如下:

public class MyActivity extends Activity

{

/*声明变量一个Button与两个EditText*/

private Button mButton1;

private EditText mEditText1;

private EditText mEditText2;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

/*

* 通过findViewById构造器来建构

* EditText1,EditText2与Button对象

*/

mEditText1 = (EditText) findViewById(R.id.myEditText1);

mEditText2 = (EditText) findViewById(R.id.myEditText2);

mButton1 = (Button) findViewById(R.id.myButton1);

/*将默认文字加载EditText中*/

mEditText1.setText("请输入号码");

mEditText2.setText("请输入内容!!");

/*设置onClickListener 让用户点击EditText时做出反应*/

mEditText1.setOnClickListener(new EditText.OnClickListener()

{

public void onClick(View v)

{

/*点击EditText时清空正文*/

mEditText1.setText("");

}

}

);

/*设置onClickListener 让用户点击EditText时做出反应*/

mEditText2.setOnClickListener(new EditText.OnClickListener()

{

public void onClick(View v)

{

/*点击EditText时清空正文*/

mEditText2.setText("");

}

}

);

/*设置onClickListener 让用户点击Button时做出反应*/

mButton1.setOnClickListener(new Button.OnClickListener()

{

@Override

public void onClick(View v)

{

/*由EditText1取得短信收件人电话*/

String strDestAddress = mEditText1.getText().toString();

/*由EditText2取得短信文字内容*/

String strMessage = mEditText2.getText().toString();

/*建构一取得default instance的 SmsManager对象 */

SmsManager smsManager = SmsManager.getDefault();

// TODO Auto-generated method stub

/*检查收件人电话格式与短信字数是否超过70字符*/

if(isPhoneNumberValid(strDestAddress)==true &&

iswithin70(strMessage)==true)

{

try

{

/*

* 两个条件都检查通过的情况下,发送短信

* 先建构一PendingIntent对象并使用getBroadcast()广播

* 将PendingIntent,电话,短信文字等参数

* 传入sendTextMessage()方法发送短信

*/

PendingIntent mPI = PendingIntent.getBroadcast

(MyActivity.this, 0, new Intent(), 0);

smsManager.sendTextMessage

(strDestAddress, null, strMessage, mPI, null);

}

catch(Exception e)

{

e.printStackTrace();

}

Toast.makeText

(

MyActivity.this,"送出成功!!" ,

Toast.LENGTH_SHORT

).show();

}

else

{

/* 电话格式与短信文字不符合条件时,以Toast提醒 */

if (isPhoneNumberValid(strDestAddress)==false)

{ /*且字数超过70字符*/

if(iswithin70(strMessage)==false)

{

Toast.makeText

(

MyActivity.this,

"电话号码格式错误+短信内容超过70字,请检查!!",

Toast.LENGTH_SHORT

).show();

}

else

{

Toast.makeText

(

MyActivity.this,

"电话号码格式错误,请检查!!" ,

Toast.LENGTH_SHORT

).show();

}

}

/*字数超过70字符*/

else if (iswithin70(strMessage)==false)

{

Toast.makeText

(

MyActivity.this,

"短信内容超过70字,请删除部分内容!!",

Toast.LENGTH_SHORT

).show();

}

}

}

});

}

/*检查字符串是否为电话号码的方法,并返回true or false的判断值*/

public static boolean isPhoneNumberValid(String phoneNumber)

{

boolean isValid = false;

/* 可接受的电话格式有:

* ^\\(? : 可以使用 "(" 作为开头

* (\\d{3}): 紧接着三个数字

* \\)? : 可以使用")"接续

* [- ]? : 在上述格式后可以使用具选择性的 "-".

* (\\d{3}) : 再紧接着三个数字

* [- ]? : 可以使用具选择性的 "-" 接续.

* (\\d{5})$: 以五个数字结束.

* 可以比较下列数字格式:

* (123)456-7890, 123-456-7890, 1234567890, (123)-456-7890

*/

String expression =

"^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{5}){1}quot;;

/* 可接受的电话格式有:

* ^\\(? : 可以使用 "(" 作为开头

* (\\d{3}): 紧接着三个数字

* \\)? : 可以使用")"接续

* [- ]? : 在上述格式后可以使用具选择性的 "-".

* (\\d{4}) : 再紧接着四个数字

* [- ]? : 可以使用具选择性的 "-" 接续.

* (\\d{4})$: 以四个数字结束.

* 可以比较下列数字格式:

* (02)3456-7890, 02-3456-7890, 0234567890, (02)-3456-7890

*/

String expression2=

"^\\(?(\\d{3})\\)?[- ]?(\\d{4})[- ]?(\\d{4}){1}quot;;

CharSequence inputStr = phoneNumber;

/*创建Pattern*/

Pattern pattern = Pattern.compile(expression);

/*将Pattern 以参数传入Matcher作Regular expression*/

Matcher matcher = pattern.matcher(inputStr);

/*创建Pattern2*/

Pattern pattern2 =Pattern.compile(expression2);

/*将Pattern2 以参数传入Matcher2作Regular expression*/

Matcher matcher2= pattern2.matcher(inputStr);

if(matcher.matches()||matcher2.matches())

{

isValid = true;

}

return isValid;

}

public static boolean iswithin70(String text)

{

if (text.length()<= 70)

{

return true;

}

else

{

return false;

}

}

}

5、到此整个项目已经开发完毕!

到此本该结束,但是考虑到一些细节,有必要说下。

本项目的基本思想:在具体实现上,是通过SmsManager对象的sendTextMessage()方法来实现的,其中sendTextMessage()方法需要传入5个值,依次是:收件人地址String、发送地址String、正文String、发送服务PendingIntent和送达服务PendingInten。在这里我们还详细的定义了电话的格式,文中有详细的说明。还约束了短信内容的字长!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ISP (互联网服务提供商)

ISP&#xff1a;全称为Internet Service Provider&#xff0c;即因特网服务提供商&#xff0c;能提供拨号上网服务、网上浏览、下载文件、收发电子邮件等服务&#xff0c;是网络最终用户进入Internet的入口和桥梁。它包括Internet接入服务和Internet内容提供服务。这里主要是In…

应用层组播、IP组播

通常说的组播一般指IP组播&#xff0c;IGMP协议等 什么是应用层组播&#xff1f; 应用层组播通过在应用层复制和缓存数据包而不是在路由器上复制数据包来避免IP组播的部署问题。应用层组播无须对路由器作任何修改,因此在 Internet 上非常容易部署 为了改善网络效率&#xff0…

android 酷炫倒计时,android 好用的倒计时

android倒计时 是在原有TextView的基础上进行二次开发的自定义View效果图这个主要是结合了android的CountDownTimer&#xff0c;这个一般就是发送短信的倒计时。包含功能倒计时时间超过一个小时显示 时&#xff1a;分&#xff1a;秒时间小于一小时显示&#xff1a;分 &#xff…

音视频常见问题分析和解决:延迟(时延 delay)和抖动

延迟和抖动 延迟&#xff1a;是网络传输中的一个重要指标&#xff0c;测量了数据从一个端点到另外一个端点所需的时间。一般我们用毫秒作为其单位。通常我们也把延迟叫做延时&#xff0c;但是延时有时还会表示数据包发送端到接受端的往返时间。这个往返时间我们可以通过网络监…

forkjoin_应用ForkJoin –从最佳到快速

forkjoin到目前为止&#xff0c;JDK 7已很好地掌握在开发人员手中&#xff0c;并且大多数人都听说过ForkJoin&#xff0c;但是没有多少人有时间或机会去尝试它。 它引起了并且可能仍然引起一些混乱&#xff0c;与普通线程池有什么不同。 [1] 我在本文中的目标是通过一个代码示…

android usb触摸屏驱动 win10,Win10手机居然这样兼容安卓:直接运行apk!

摘要&#xff1a;“应用太少是硬伤&#xff01;”这是WP粉吐槽微软简洁而有力的一句话。最新的Win10Mobile预览版中首次引入了微软的安卓子系统&#xff0c;这也是微软推行的ProjectAstoria的一部分。那么Win10手机究竟要如何兼容安卓应用呢&#xff1f;微软最新一份招聘启事似…

Java应用程序中的验证

我经常看到的项目几乎没有任何有意识的数据验证策略。 他们的团队在截止日期&#xff0c;明确要求的巨大压力下工作&#xff0c;只是没有足够的时间以适当且一致的方式进行验证。 因此&#xff0c;数据验证代码随处可见&#xff1a;JavaScript片段&#xff0c;Java屏幕控制器&a…

升级鸿蒙系统如何退出,华为鸿蒙2.0系统升级了怎么退回EMUI11系统-操作教程详解...

华为鸿蒙2.0系统升级了怎么退回EMUI11系统&#xff1f;很多用户升级了又不知道如何才能退回到原来的系统&#xff0c;下面就让老铁下载小编为大家带来&#xff0c;2.0系统升级退回EMUI11系统操作教程详解。这次开启华为鸿蒙2.0系统手机开发者beta版公测招募的机型有华为P40 、P…

OpenFlow和SDN的历史和原理介绍

OpenFlow相关的历史、新闻&#xff1a;http://blog.csdn.net/jincm13/article/details/7825754 起源与发展 【https://36kr.com/p/5035985】   OpenFlow起源于斯坦福大学的Clean Slate项目组 [1] 。CleanSlate项目的最终目的是要重新发明英特网&#xff0c;旨在改变设计已略…

小米miuiVS华为鸿蒙,华为鸿蒙2.0 vs 小米MIUI 12.5

原标题&#xff1a;华为鸿蒙2.0 vs 小米MIUI 12.5不久前有媒体在视频中展示了鸿蒙2.0和苹果IOS14两个操作系统下App的启动速度&#xff0c;结果是鸿蒙2.0完胜IOS14。此后不久&#xff0c;该媒体发布了华为鸿蒙2.0和小米MIUI 12.5对比视频。同上次一样&#xff0c;这次依然是选择…

具有MicroProfile配置的可配置JAX-RS ExceptionMapper

当您使用JAX-RS创建REST服务时&#xff0c;通常要么不返回任何内容&#xff08;例如HTTP 201/2/4等&#xff09;&#xff0c;要么返回某些数据&#xff08;可能采用JSON格式&#xff08;因此HTTP 200&#xff09;&#xff0c;或者返回某些异常/错误&#xff08;例如HTTP 4xx或5…

Ad-hoc

Ad-hoc这个词来源于拉丁语&#xff0c;在百度上解释为“for this purpose only”&#xff0c;在wiki上解释为“for this”&#xff0c;其中文在wiki上被解释成包含特设的、特定目的的&#xff08;地&#xff09;、即席的、临时的、将就的、专案的”这么多种含义。在wireless ne…

android5.0 v4a,【图】多图讲解V4A提高G5音效详细步骤(G5音效可以更棒的)

首先感谢论坛前辈&#xff0c;看着你们介绍的方法&#xff0c;我把G5应有的音效搞出来了&#xff0c;效果提升非常明显。(看清了&#xff0c;如果不是非常明显&#xff0c;我也不会费这么大劲在这儿做讲解)。特记录和总结过程如下&#xff1a;1. 安装一键ROOT。2. 安装虚拟按…

Multi-commodity Flow Problem

多物网络流问题&#xff08;Multi-commodity Flow Problem&#xff09;是多种物品&#xff08;或货物&#xff09;在网络中从不同的源点流向不同的汇点的网络流问题。 定义

信干噪比、信噪比

信干噪比 名词定义 信干噪比SINR&#xff08;Signal to Interference plus Noise Ratio&#xff09;&#xff0c;指的是系统中信号与干扰和噪声之和的比。 信号是指来自设备外部需要通过设备进行处理的电子信号。 干扰是指系统本身以及异系统带来的干扰&#xff0c;如同频干扰…

矢量图标库如何引入html,Iconfont矢量图标库在网站中的使用方法

原标题&#xff1a;Iconfont矢量图标库在网站中的使用方法大家都知道现在移动端网站设计比较热门&#xff0c;由于移动端的网站页面的收缩性要求很高&#xff0c;必然在网页设计中&#xff0c;一些小点的图标&#xff0c;使用图片收缩性&#xff0c;以及美观上并不是很理想&…

弗林斯传输公式、天线温度

这是被称为弗林斯传输公式。这个等式关系 自由空间路径损耗&#xff0c;天线增益和波长 接收和发射功率。这是一个基本 在天线理论方程&#xff0c;应该记住的&#xff08;以及 上述推导&#xff09;。 弗林斯传输方程的另一种有用的形式是给定的公式[2]。自 波长和频率&#…

马尔可夫决策过程 Markov decision process MDP, 连续时间Markov chain, CMDP(全)

引言 在概率论及统计学中&#xff0c;马尔可夫过程&#xff08;英语&#xff1a;Markov process&#xff09;是一个具备了马尔可夫性质的随机过程&#xff0c;因为俄国数学家安德雷马尔可夫得名。马尔可夫过程是不具备记忆特质的&#xff08;memorylessness&#xff09;。换言…

Spring Boot完成示例

这篇文章提供了一个使用Spring Boot开发松耦合REST服务的完整示例。 使用spring boot&#xff0c;我们可以开发可独立运行的生产就绪Java应用程序&#xff0c;它是独立的应用程序&#xff0c;具有最小的依赖性&#xff0c;并且与其他应用程序的耦合较少。 大多数时候&#xff0…

最小生成树、最短路径树

一、最小生成树与最短路径树的区别 最小生成树能够保证整个拓扑图的所有路径之和最小&#xff0c;但不能保证任意两点之间是最短路径。 应用如网络部线&#xff0c;把所有的电脑(服务器&#xff1f;&#xff09;都连起来用的网线(光纤&#xff1f;&#xff09;最少&#xff0c…