閱讀933 返回首頁    go 阿裏雲 go 技術社區[雲棲]


android 發送短信 判斷號碼規則 判斷字符數70




public class duan 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
            (duan.this, 0, new Intent(), 0);
            smsManager.sendTextMessage
            (strDestAddress, null, strMessage, mPI, null); 
          } 
          catch(Exception e) 
          { 
            e.printStackTrace(); 
          } 
          Toast.makeText
          (
            duan.this,"送出成功!!" , 
            Toast.LENGTH_SHORT
          ).show();
          mEditText1.setText("");
          mEditText2.setText("");
        }
        else 
        {
          /* 電話格式與短信文字不符合條件時,以Toast提醒 */
          if (isPhoneNumberValid(strDestAddress)==false)
          { /*且字數超過70字符*/
            if(iswithin70(strMessage)==false)
            {
              Toast.makeText
              (
                duan.this, 
                "電話號碼格式錯誤+短信內容超過70字,請檢查!!",
                Toast.LENGTH_SHORT
              ).show();
            }
            else
            {
              Toast.makeText
              (
                duan.this,
                "電話號碼格式錯誤,請檢查!!" , 
                Toast.LENGTH_SHORT
              ).show();
            }
          }
          /*字數超過70字符*/
          else if (iswithin70(strMessage)==false)
          {
            Toast.makeText
            (
              duan.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})$";
    
    /* 可接受的電話格式有:
     * ^\\(? : 可以使用 "(" 作為開頭
     * (\\d{3}): 緊接著三個數字
     * \\)? : 可以使用")"接續
     * [- ]? : 在上述格式後可以使用具選擇性的 "-".
     * (\\d{4}) : 再緊接著四個數字
     * [- ]? : 可以使用具選擇性的 "-" 接續.
     * (\\d{4})$: 以四個數字結束.
     * 可以比較下列數字格式:
     * (02)3456-7890, 02-3456-7890, 0234567890, (02)-3456-7890  
    */
    String expression2=
    "^\\(?(\\d{3})\\)?[- ]?(\\d{4})[- ]?(\\d{4})$";
    
    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;
    }
  }
}











最後更新:2017-04-02 16:48:19

  上一篇:go 高通,三星,德州,三處理器三分天下
  下一篇:go 技術人員談管理之質量管理失敗原因和提高方法