Android--判断发送短信后的状态/发送成功Or发送失败

相信用过诺基亚手机的朋友可能会记得,在短信发送之后,手机会显示发送手机的状态,Android同样也提供了相应的功能,而且实现这个功能的方法也很简单。

首先,我们需要在程序中注册两个权限:

1.接收短信的权限

2.发送短信的权限

[html]  view plain copy
  1. <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>  
  2. <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>  

之后,我们需要开启两个模拟器测试程序的功能,下面是实现的截图,首先看第一张截图,是一个模拟器接收到另一个模拟器发送来的短信显示在通知栏里:

Android--判断发送短信后的状态/发送成功Or发送失败_第1张图片

我们会看到这个模拟器的端口号叫做5554,这个就相当于手机号,我们发送短信只要把这个号码当做是手机号使用即可,下面这张截图是主程序的实现截图,点击发送按钮,短信被发出,同时,如果成功,系统会发送广播信息。

截图如下:

Android--判断发送短信后的状态/发送成功Or发送失败_第2张图片

下面给出程序的实现代码:

[java]  view plain copy
  1. public class EX06_14 extends Activity  
  2. {  
  3.   /* 建立两个mServiceReceiver对象,作为类成员变量 */  
  4.   private mServiceReceiver mReceiver01, mReceiver02;  
  5.   private Button mButton1;  
  6.   private TextView mTextView01;  
  7.   private EditText mEditText1, mEditText2;  
  8.     
  9.   /* 自定义ACTION常数,作为广播的Intent Filter识别常数 */  
  10.   private static String SMS_SEND_ACTIOIN = "SMS_SEND_ACTIOIN";  
  11.   private static String SMS_DELIVERED_ACTION = "SMS_DELIVERED_ACTION";  
  12.       
  13.   /** Called when the activity is first created. */  
  14.   @Override  
  15.   public void onCreate(Bundle savedInstanceState)  
  16.   {  
  17.     super.onCreate(savedInstanceState);  
  18.     setContentView(R.layout.main);  
  19.       
  20.     mTextView01 = (TextView)findViewById(R.id.myTextView1);  
  21.       
  22.     /* 电话号码 */  
  23.     mEditText1 = (EditText) findViewById(R.id.myEditText1);  
  24.       
  25.     /* 短信内容 */  
  26.     mEditText2 = (EditText) findViewById(R.id.myEditText2);  
  27.       
  28.     mButton1 = (Button) findViewById(R.id.myButton1);  
  29.       
  30.     //mEditText1.setText("+886935123456");  
  31.     /* 设定预设为5556表示第二个模拟器的Port */  
  32.     mEditText1.setText("5556");  
  33.     mEditText2.setText("Hello DavidLanz!");  
  34.       
  35.     /* 发送SMS短信按钮事件处理 */  
  36.     mButton1.setOnClickListener(new Button.OnClickListener()  
  37.     {  
  38.       @Override  
  39.       public void onClick(View arg0)  
  40.       {  
  41.         // TODO Auto-generated method stub  
  42.           
  43.         /* 欲发送的电话号码 */  
  44.         String strDestAddress = mEditText1.getText().toString();  
  45.           
  46.         /* 欲发送的短信内容 */  
  47.         String strMessage = mEditText2.getText().toString();  
  48.           
  49.         /* 建立SmsManager对象 */  
  50.         SmsManager smsManager = SmsManager.getDefault();  
  51.           
  52.         // TODO Auto-generated method stub  
  53.         try  
  54.         {  
  55.           /* 建立自定义Action常数的Intent(给PendingIntent参数之用) */  
  56.           Intent itSend = new Intent(SMS_SEND_ACTIOIN);  
  57.           Intent itDeliver = new Intent(SMS_DELIVERED_ACTION);  
  58.             
  59.           /* sentIntent参数为传送后接受的广播信息PendingIntent */  
  60.           PendingIntent mSendPI = PendingIntent.getBroadcast(getApplicationContext(), 0, itSend, 0);  
  61.             
  62.           /* deliveryIntent参数为送达后接受的广播信息PendingIntent */  
  63.           PendingIntent mDeliverPI = PendingIntent.getBroadcast(getApplicationContext(), 0, itDeliver, 0);  
  64.             
  65.           /* 发送SMS短信,注意倒数的两个PendingIntent参数 */  
  66.           smsManager.sendTextMessage(strDestAddress, null, strMessage, mSendPI, mDeliverPI);  
  67.           mTextView01.setText(R.string.str_sms_sending);  
  68.         }  
  69.         catch(Exception e)  
  70.         {  
  71.           mTextView01.setText(e.toString());  
  72.           e.printStackTrace();  
  73.         }  
  74.       }  
  75.     });  
  76.   }  
  77.     
  78.   /* 自定义mServiceReceiver重写BroadcastReceiver监听短信状态信息 */  
  79.   public class mServiceReceiver extends BroadcastReceiver  
  80.   {  
  81.     @Override  
  82.     public void onReceive(Context context, Intent intent)  
  83.     {  
  84.       // TODO Auto-generated method stub  
  85.         
  86.       //mTextView01.setText(intent.getAction().toString());  
  87.       if (intent.getAction().equals(SMS_SEND_ACTIOIN))  
  88.       {  
  89.         try  
  90.         {  
  91.           /* android.content.BroadcastReceiver.getResultCode()方法 */  
  92.           //Retrieve the current result code, as set by the previous receiver.  
  93.           switch(getResultCode())  
  94.           {  
  95.             case Activity.RESULT_OK:  
  96.               /* 发送短信成功 */  
  97.               //mTextView01.setText(R.string.str_sms_sent_success);  
  98.               mMakeTextToast  
  99.               (  
  100.                 getResources().getText(R.string.str_sms_sent_success).toString(),  
  101.                 true  
  102.               );  
  103.               break;  
  104.             case SmsManager.RESULT_ERROR_GENERIC_FAILURE:  
  105.               /* 发送短信失败 */  
  106.               //mTextView01.setText(R.string.str_sms_sent_failed);  
  107.               mMakeTextToast  
  108.               (  
  109.                 getResources().getText(R.string.str_sms_sent_failed).toString(),  
  110.                 true  
  111.               );  
  112.               break;  
  113.             case SmsManager.RESULT_ERROR_RADIO_OFF:  
  114.               break;  
  115.             case SmsManager.RESULT_ERROR_NULL_PDU:  
  116.               break;  
  117.           }          
  118.         }  
  119.         catch(Exception e)  
  120.         {  
  121.           mTextView01.setText(e.toString());  
  122.           e.getStackTrace();  
  123.         }  
  124.       }  
  125.       else if(intent.getAction().equals(SMS_DELIVERED_ACTION))  
  126.       {  
  127.         try  
  128.         {  
  129.           /* android.content.BroadcastReceiver.getResultCode()方法 */  
  130.           switch(getResultCode())  
  131.           {  
  132.             case Activity.RESULT_OK:  
  133.               /* 短信 */  
  134.               //mTextView01.setText(R.string.str_sms_sent_success);  
  135.               mMakeTextToast  
  136.               (  
  137.                 getResources().getText(R.string.str_sms_rec_success).toString(),  
  138.                 true  
  139.               );  
  140.               break;  
  141.             case SmsManager.RESULT_ERROR_GENERIC_FAILURE:  
  142.               /* 短信未送达 */  
  143.               //mTextView01.setText(R.string.str_sms_sent_failed);  
  144.               mMakeTextToast  
  145.               (  
  146.                 getResources().getText(R.string.str_sms_rec_failed).toString(),  
  147.                 true  
  148.               );  
  149.               break;  
  150.             case SmsManager.RESULT_ERROR_RADIO_OFF:  
  151.               break;  
  152.             case SmsManager.RESULT_ERROR_NULL_PDU:  
  153.               break;  
  154.           }          
  155.         }  
  156.         catch(Exception e)  
  157.         {  
  158.           mTextView01.setText(e.toString());  
  159.           e.getStackTrace();  
  160.         }  
  161.       }        
  162.     }  
  163.   }  
  164.     
  165.   public void mMakeTextToast(String str, boolean isLong)  
  166.   {  
  167.     if(isLong==true)  
  168.     {  
  169.       Toast.makeText(EX06_14.this, str, Toast.LENGTH_LONG).show();  
  170.     }  
  171.     else  
  172.     {  
  173.       Toast.makeText(EX06_14.this, str, Toast.LENGTH_SHORT).show();  
  174.     }  
  175.   }  
  176.   //这是重载Activity中的函数  
  177.   @Override  
  178.   protected void onResume()  
  179.   {  
  180.     // TODO Auto-generated method stub  
  181.       
  182.     /* 自定义IntentFilter为SENT_SMS_ACTIOIN Receiver */  
  183.     IntentFilter mFilter01;  
  184.     mFilter01 = new IntentFilter(SMS_SEND_ACTIOIN);  
  185.     mReceiver01 = new mServiceReceiver();  
  186.     registerReceiver(mReceiver01, mFilter01);  
  187.       
  188.     /* 自定义IntentFilter为DELIVERED_SMS_ACTION Receiver */  
  189.     mFilter01 = new IntentFilter(SMS_DELIVERED_ACTION);  
  190.     mReceiver02 = new mServiceReceiver();  
  191.     registerReceiver(mReceiver02, mFilter01);  
  192.       
  193.     super.onResume();  
  194.   }  
  195.     
  196.   @Override  
  197.   protected void onPause()  
  198.   {  
  199.     // TODO Auto-generated method stub  
  200.       
  201.     /* 取消注册自定义Receiver */  
  202.     unregisterReceiver(mReceiver01);  
  203.     unregisterReceiver(mReceiver02);  
  204.       
  205.     super.onPause();  
  206.   }  
  207. }  

你可能感兴趣的:(android)