android之发送短信的方法研究


android中可以通过两种方式发送短信 

第一:调起系统发短信功能;主要代码如下:

[java]  view plain copy print ?
  1. Uri uri = Uri.parse("smsto:10010");            
  2. Intent it = new Intent(Intent.ACTION_SENDTO, uri);            
  3. it.putExtra("sms_body""102");            
  4. activity.startActivity(it);  

第二:调用系统短信接口直接发送短信;主要代码如下: 

[java]  view plain copy print ?
  1. //直接调用短信接口发短信  
  2. SmsManager smsManager = SmsManager.getDefault();  
  3. List<String> divideContents = smsManager.divideMessage(content);    
  4. for (String text : divideContents) {    
  5.     smsManager.sendTextMessage("150xxxxxxxx"null, text, sentPI, deliverPI);    
  6. }  

 

这里主要讲解第二种方法,不跳转直接发送,对于用户体验来说是好的:

上面第一行代码,是获取短信管理器,

第二行是拆分短信内容,因为短信对于字数是有限制的

第三至五行就是真正发送短信了,

对于短信发送的参数如下:

[java]  view plain copy print ?
  1. smsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent)    

-- destinationAddress:目标电话号码,你要发给谁 
-- scAddress:短信中心号码,测试可以不填
-- text: 短信内容
-- sentIntent:发送 -->中国移动 --> 中国移动发送失败 --> 返回发送成功或失败信号 --> 后续处理  

                          即,这个意图包装了短信发送状态的信息,是否发送成功 
-- deliveryIntent: 发送 -->中国移动 --> 中国移动发送成功 --> 返回对方是否收到这个信息 --> 后续处理

                           即:这个意图包装了短信是否被对方收到的状态信息,对方是否成功接收(供应商已经发送成功,但是对方没有收到)。 

那么调用系统发送短信之后,还要处理返回的状态,代码如下:

处理返回的发送状态

[java]  view plain copy print ?
  1. String SENT_SMS_ACTION = "SENT_SMS_ACTION";  
  2. Intent sentIntent = new Intent(SENT_SMS_ACTION);  
  3. PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, sentIntent, 0);  
  4. // register the Broadcast Receivers  
  5. context.registerReceiver(new BroadcastReceiver() {  
  6.     @Override  
  7.     public void onReceive(Context _context, Intent _intent) {  
  8.         switch (getResultCode()) {  
  9.               case Activity.RESULT_OK:  
  10.                    Toast.makeText(context,  
  11.                 "短信发送成功", Toast.LENGTH_SHORT)  
  12.                 .show();  
  13.         break;  
  14.           case SmsManager.RESULT_ERROR_GENERIC_FAILURE:  
  15.         break;  
  16.           case SmsManager.RESULT_ERROR_RADIO_OFF:  
  17.         break;  
  18.           case SmsManager.RESULT_ERROR_NULL_PDU:  
  19.         break;  
  20.         }  
  21.     }  
  22. }, new IntentFilter(SENT_SMS_ACTION));  
处理返回的接收状态 
[java]  view plain copy print ?
  1. String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";  
  2. // create the deilverIntent parameter  
  3. Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);  
  4. PendingIntent deliverPI = PendingIntent.getBroadcast(context, 0,  
  5.        deliverIntent, 0);  
  6. context.registerReceiver(new BroadcastReceiver() {  
  7.    @Override  
  8.    public void onReceive(Context _context, Intent _intent) {  
  9.        Toast.makeText(context,  
  10.   "收信人已经成功接收", Toast.LENGTH_SHORT)  
  11.   .show();  
  12.    }  
  13. }, new IntentFilter(DELIVERED_SMS_ACTION));  

作者:jason0539

微博:http://weibo.com/2553717707

博客:http://blog.csdn.net/jason0539(转载请说明出处)

你可能感兴趣的:(android之发送短信的方法研究)