Android开发之短信发送

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

   

                                      图(1)                                                                                   图(2)

                                    图(3)

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

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

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

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

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

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

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
  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"
  >
  <TextView
    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"
  >
  </TextView>
  <EditText
    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"
  >
  </EditText>
  <EditText
    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"
  >
  </EditText>
  <Button
    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"
  >
  </Button>
</AbsoluteLayout>

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

string.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
  <string name="app_name">SendMessage</string> 
  <string name="str_button1">发送</string> 
  <string name="str_textview">收件人</string>
</resources> 

color.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
  <drawable name="darkgray">#808080</drawable> 
  <drawable name="white">#FFFFFF</drawable> 
  <drawable name="blue">#0000FF</drawable> 
</resources> 

这里说一下,为什么我们要新建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。在这里我们还详细的定义了电话的格式,文中有详细的说明。还约束了短信内容的字长!


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值