EX06_17.java
上传用户:vip_99
上传日期:2021-03-27
资源大小:61159k
文件大小:7k
源码类别:

android开发

开发平台:

Java

  1. package irdc.ex06_17;
  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;
  4. import android.app.Activity;
  5. import android.app.PendingIntent;
  6. import android.content.Intent;
  7. import android.os.Bundle;
  8. import android.telephony.gsm.SmsManager;
  9. import android.view.View;
  10. import android.widget.Button;
  11. import android.widget.TextView;
  12. import android.widget.Toast;
  13. public class EX06_17 extends Activity
  14. {
  15.   private Button mButton01,mButton02;
  16.   private TextView mTextView01;
  17.     
  18.   /* 双向短信识别关键字 */
  19.   private static String strSecretWord="IRDC";
  20.   
  21.   /* 广播信息加Delimiter上返回识别TAG */
  22.   public static String strDelimiter1="<delimiter1>";
  23.   
  24.   /** Called when the activity is first created. */
  25.   @Override
  26.   public void onCreate(Bundle savedInstanceState)
  27.   {
  28.     super.onCreate(savedInstanceState);
  29.     setContentView(R.layout.main);
  30.     
  31.     mTextView01 = (TextView)findViewById(R.id.myTextView1);
  32.     
  33.     try
  34.     {
  35.       /* 创建Bundle对象,判断是否有传入封装参数 */
  36.       Bundle mBundle01 = this.getIntent().getExtras();
  37.       if (mBundle01 != null)
  38.       {
  39.         /* 取得参数名称STR_PARAM01 */
  40.         String strParam01 = mBundle01.getString("STR_PARAM01");   
  41.         String[] aryTemp01 = null;
  42.         
  43.         /* 发现为来自广播的信息参数,表示来自自己的广播事件 */
  44.         if(eregi(strDelimiter1,strParam01))
  45.         {
  46.           /* 判断strDelimiter,并以数组存放 */
  47.           aryTemp01 = strParam01.split(strDelimiter1);
  48.           
  49.           /* 判断数组元素[0]是否为
  50.            * 电话号码以及对短信关键字进行检查 */
  51.           if(isTWCellPhone(aryTemp01[0]) && 
  52.              eregi(strSecretWord,aryTemp01[1])
  53.              && aryTemp01.length==2)
  54.           {
  55.             /* 显示已捕捉到双向短信关键字 */
  56.             mMakeTextToast
  57.             (
  58.               getResources().getText
  59.               (R.string.str_cmd_sms_catched).toString(), false
  60.             );
  61.             
  62.             /* 原发送短信User的电话,亦是返回短信的电话号码 */
  63.             String strDestAddress = aryTemp01[0];
  64.             
  65.             /* 测试模拟器之间是否顺利送达的Port Number */
  66.             //String strDestAddress = "5556";
  67.             
  68.             /* 要返回的SMS BODY内容 */
  69.             String strMessage = getResources().getText
  70.             (R.string.str_cmd_sms_returned).toString();
  71.             
  72.             /* 创建SmsManager对象 */
  73.             SmsManager smsManager = SmsManager.getDefault();
  74.             
  75.             // TODO Auto-generated method stub
  76.             try
  77.             {
  78.               /* 创建PendingIntent作为sentIntent参数 */
  79.               PendingIntent mPI = PendingIntent.getBroadcast
  80.               (EX06_17.this, 0, new Intent(), 0);
  81.               
  82.               /* 直接传送短信 */
  83.               smsManager.sendTextMessage
  84.               (strDestAddress, null, strMessage, mPI, null);
  85.               
  86.               /* 系统自动返回短信之后,以Toast显示结果 */
  87.               mMakeTextToast
  88.               (
  89.                 getResources().getText
  90.                 (R.string.str_cmd_sms_sending).toString()+
  91.                 strDestAddress,
  92.                 true
  93.               );
  94.             }
  95.             catch(Exception e)
  96.             {
  97.               e.printStackTrace();
  98.             }
  99.             finish();
  100.           }
  101.           else
  102.           {
  103.             /* 若没有发现可识别的来电电话号码 */
  104.             /* 判断是否为来自自己的自定义SMS Receiver广播信息 */
  105.             if(eregi(strDelimiter1,strParam01))
  106.             {
  107.               aryTemp01 = strParam01.split(strDelimiter1);
  108.               mTextView01.setText(aryTemp01[1].toString());
  109.             }
  110.             else
  111.             {
  112.               /* 没有自己的广播事件,纯粹为一般SMS短信 */
  113.               mTextView01.setText(strParam01);
  114.             }
  115.           }
  116.         }
  117.         else
  118.         {
  119.           if(eregi(strDelimiter1,strParam01))
  120.           {
  121.             aryTemp01 = strParam01.split(strDelimiter1);
  122.             mTextView01.setText(aryTemp01[1].toString());
  123.           }
  124.           else
  125.           {
  126.             /* 没有自己的广播事件,纯粹为一般SMS短信 */
  127.             mTextView01.setText(strParam01);
  128.           }
  129.         }
  130.       }
  131.     }
  132.     catch(Exception e)
  133.     {
  134.       e.printStackTrace();
  135.     }
  136.     
  137.     mButton01 = (Button)findViewById(R.id.myButton1);
  138.     
  139.     /* 开始聆听双向短信服务(mService1)启动 */
  140.     mButton01.setOnClickListener(new Button.OnClickListener()
  141.     {
  142.       @Override
  143.       public void onClick(View arg0)
  144.       {
  145.         // TODO Auto-generated method stub
  146.         Intent i = new Intent( EX06_17.this, mService1.class ); 
  147.         i.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); 
  148.         startService(i);
  149.         mMakeTextToast(getResources().getText
  150.         (R.string.str_service_online).toString(),true);
  151.         finish();
  152.       }
  153.     });
  154.     
  155.     mButton02 = (Button)findViewById(R.id.myButton2);
  156.     
  157.     /* 终止聆听双向短信服务(mService1) */
  158.     mButton02.setOnClickListener(new Button.OnClickListener()
  159.     {
  160.       @Override
  161.       public void onClick(View arg0)
  162.       {
  163.         // TODO Auto-generated method stub
  164.         Intent i = new Intent( EX06_17.this, mService1.class );
  165.         stopService(i);
  166.         mMakeTextToast(getResources().getText
  167.         (R.string.str_service_offline).toString(),true);
  168.       }
  169.     });
  170.   }
  171.   
  172.   public void mMakeTextToast(String str, boolean isLong)
  173.   {
  174.     if(isLong==true)
  175.     {
  176.       Toast.makeText(EX06_17.this, str, Toast.LENGTH_LONG).show();
  177.     }
  178.     else
  179.     {
  180.       Toast.makeText(EX06_17.this, str, Toast.LENGTH_SHORT).show();
  181.     }
  182.   }
  183.   
  184.   /* 判断接收的短信是否为有关键字的短信 */
  185.   public static boolean isCommandSMS(String strPat, String strSMS)
  186.   {
  187.     String strPattern = "(?i)"+strPat;
  188.     Pattern p = Pattern.compile(strPattern);
  189.     Matcher m = p.matcher(strSMS);
  190.     return m.find();
  191.   }
  192.   
  193.   /* 自定义正规表达式,无分大小写比较字符串 */
  194.   public static boolean eregi(String strPat, String strUnknow)
  195.   {
  196.     /* 方法一 */
  197.     String strPattern = "(?i)"+strPat;
  198.     Pattern p = Pattern.compile(strPattern);
  199.     Matcher m = p.matcher(strUnknow);
  200.     return m.find();
  201.   }
  202.   
  203.   /* 判断短信发送者的来电,是否为移动电话格式 */
  204.   public static boolean isTWCellPhone(String strUnknow)
  205.   {
  206.     /*
  207.      * (0935)456-789, 0935-456-789, 1234567890, (0935)-456-789
  208.      * */
  209.     String strPattern="^\(?(\d{4})\)?[-]?(\d{3})[-]?(\d{4})$";
  210.     Pattern p = Pattern.compile(strPattern);
  211.     Matcher m = p.matcher(strUnknow);
  212.     return m.matches();
  213.   }
  214.   
  215.   /* 判断短信发送者的来电,是否为美国移动电话格式 */
  216.   public static boolean isUSCellPhone(String strUnknow)
  217.   {
  218.     /*
  219.      * (123)456-7890, 123-456-7890, 1234567890, (123)-456-7890
  220.      * */
  221.     String strPattern="^\(?(\d{3})\)?[-]?(\d{3})[-]?(\d{4})$";
  222.     Pattern p = Pattern.compile(strPattern);
  223.     Matcher m = p.matcher(strUnknow);
  224.     return m.matches();
  225.   }
  226.   
  227.   @Override
  228.   protected void onResume()
  229.   {
  230.     // TODO Auto-generated method stub
  231.     super.onResume();
  232.   }
  233.   
  234.   @Override
  235.   protected void onPause()
  236.   {
  237.     // TODO Auto-generated method stub
  238.     super.onPause();
  239.   }
  240. }