美文网首页
Android发短信

Android发短信

作者: 浮生kk | 来源:发表于2017-03-31 22:10 被阅读0次

写于2017年3月31日

android发短信两种方式

1.调用系统发短信功能:
    public void sendSMS(String phoneNumber,String message){  
        if(PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber)){  
            Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+phoneNumber));            
            intent.putExtra("sms_body", message);            
            startActivity(intent);  
        }  
    } 
2.调用SmsManager:

public void sendSMS(String phoneNumber,String message){  
        //获取短信管理器   
        SmsManager smsManager = SmsManager.getDefault();  
        //拆分短信内容(短信长度显示)    
        List<String> divideContents = smsManager.divideMessage(message);   
        for (String text : divideContents) {    
            smsManager.sendTextMessage(phoneNumber, null, text, sentPI, deliverPI);    
        }  
    }  

第一种的好处是简单,缺点是没有发送成功和接收成功的回调。
第二种的好处是有回调。

当短信长度中文大于70个字节,英文大于160个字节的时候,短信就需要分段发送了,否则不能发送。

如果调用sendTextMessage()方法的话,就需要对短信进行分段,同时接受者也会收到分段的短信,感觉效果不是很好,可以使用sendMultipartTextMessage这个方法,这个方法虽然也是分段发送,但是接收到的是一整坨热乎乎的短信。

        SmsManager smsm = SmsManager.getDefault();
        ArrayList<String> divideContents = smsm.divideMessage(message);
        ArrayList<PendingIntent> pendingIntents = new ArrayList<>();
        pendingIntents.add(sentPI);
        smsm.sendMultipartTextMessage(number, null, divideContents, pendingIntents, null);

以上是简单举例 不是完整代码

方式二的回调:

//处理返回的发送状态   
String SENT_SMS_ACTION = "SENT_SMS_ACTION";  
Intent sentIntent = new Intent(SENT_SMS_ACTION);  
PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, sentIntent,   0);   
context.registerReceiver(new BroadcastReceiver() {  
    @Override  
    public void onReceive(Context _context, Intent _intent) {  
        switch (getResultCode()) {  
        case Activity.RESULT_OK:  
            Toast.makeText(context,  "短信发送成功", Toast.LENGTH_SHORT)  .show();  
        break;  
        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:  
        break;  
        case SmsManager.RESULT_ERROR_RADIO_OFF:  
        break;  
        case SmsManager.RESULT_ERROR_NULL_PDU:  
        break;  
        }  
    }  
}, new IntentFilter(SENT_SMS_ACTION));  
//处理返回的接收状态   
String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";  
// create the deilverIntent parameter  
Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);  
PendingIntent deliverPI = PendingIntent.getBroadcast(context, 0,  deliverIntent, 0);  
context.registerReceiver(new BroadcastReceiver() {  
   @Override  
   public void onReceive(Context _context, Intent _intent) {  
       Toast.makeText(context,   "收信人已经成功接收", Toast.LENGTH_SHORT)    .show();  
   }  
}, new IntentFilter(DELIVERED_SMS_ACTION));  

记得写权限!!

相关文章

网友评论

      本文标题:Android发短信

      本文链接:https://www.haomeiwen.com/subject/vdfbottx.html