今天要讲的是使用Android开发发送短信程序。我们先来看下运行效果
图(1) 图(2)
图(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。在这里我们还详细的定义了电话的格式,文中有详细的说明。还约束了短信内容的字长!