android发送短信的两种方式,发送长短信的两种方式,群发短信

来源:互联网 发布:双串联谐振双向三端口 编辑:程序博客网 时间:2024/04/30 20:25

android 发送短信的方法


方法一:调用系统的短信APP,发送短信。

Intent smsIntent = new Intent(Intent.ACTION_VIEW);smsIntent.setData(Uri.parse("smsto:"));smsIntent.setType("vnd.android-dir/mms-sms");//必须指定typesmsIntent.putExtra("address", new String("15050524563"));//address字段不能改smsIntent.putExtra("sms_body", "测试");//sms_body 不能改startActivity(smsIntent);
 或者

<span style="white-space:pre"></span> Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+ "15050524525"));                     intent.putExtra("sms_body", "测试");                     startActivity(intent);


方法二:调用系统发送短信接口(此方法可以实现短信发送成功后回调)


利用SmsManager 发送短信参数说明。

SmsManager smsManager = SmsManager.getDefault();smsManager.sendTextMessage(String destinationAddress, String scAddress, String text,PendingIntent sentIntent, PendingIntent deliveryIntent);/**     * 参数说明     * destinationAddress:收信人的手机号码     * scAddress:发信人的手机号码      * text:发送信息的内容      * sentIntent:发送是否成功的回执,用于监听短信是否发送成功。     * DeliveryIntent:接收是否成功的回执,用于监听短信对方是否接收成功。     */


注册监听器:定义IntentFilter,注册BroadcastReceiver.

private void initBroadcastReceiver() {//发送短信状态IntentFilter sendIntentFilter = new IntentFilter();sendIntentFilter.addAction(SENT_SMS_ACTION);sendBroadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {System.out.println("发送短信状态");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;}}};registerReceiver(sendBroadcastReceiver, sendIntentFilter);//接收短信状态IntentFilter deliverIntentFilter = new IntentFilter();deliverIntentFilter.addAction(DELIVERED_SMS_ACTION);deliverBroadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {System.out.println("接收短信状态");Toast.makeText(context, "收信人已经成功接收", Toast.LENGTH_SHORT).show();}};registerReceiver(deliverBroadcastReceiver, deliverIntentFilter);}

点击按钮发送短信: 定义了发送状态和接收状态的PendingIntent。调用sendTextMessage 方法。

protected void sendMessageByInterface1() {String phoneNumber = vSendNo.getText().toString().trim();String message = vSendContent.getText().toString().trim();SmsManager sms = SmsManager.getDefault();Intent sentIntent = new Intent(SENT_SMS_ACTION);PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, sentIntent, 0);Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);PendingIntent deliverPI = PendingIntent.getBroadcast(this, 0, deliverIntent, 0);if (message.length() > 70) {ArrayList<String> msgs = sms.divideMessage(message);for (String msg : msgs) {sms.sendTextMessage(phoneNumber, null, msg, sentPI, deliverPI);}} else {sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);}}

另外一种发送短信的接口:

protected void sendMessageByInterface2() {String phoneNumber = vSendNo.getText().toString().trim();String message = vSendContent.getText().toString().trim();SmsManager sms = SmsManager.getDefault();Intent sentIntent = new Intent(SENT_SMS_ACTION);PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, sentIntent, 0);Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);PendingIntent deliverPI = PendingIntent.getBroadcast(this, 0, deliverIntent, 0);if (message.length() > 70) {      ArrayList<String> msgs = sms.divideMessage(message);      ArrayList<PendingIntent> sentIntents =  new ArrayList<PendingIntent>();        for(int i = 0;i<msgs.size();i++){         sentIntents.add(sentPI);      }      sms.sendMultipartTextMessage(phoneNumber, null, msgs, sentIntents, null);  } else {       sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);  }  }

两种发送短信接口的区别在于,如果发送内容多余70字节。会发送长短信。

第一种方法发送短信,是将短信分割成多条短信,分别发给接收方。第二种方法是将短信内容一次性发给接收方。在接收方的短信列表中,显示的是一条短信,但是实际上还是按多条短信计费。



群发短信

for (int i = 0; i < contactList.size(); i++) { // contactList 发送人列表            Intent itSend = new Intent(SENT_SMS_ACTION); // 自定义 Intent  Action             itSend.putExtra(KEY_PHONENUM, contactList.get(i)); // KEY_PHONENUM: 携带数据,收件人KEY 。            PendingIntent mSendPI = PendingIntent.getBroadcast(getApplicationContext(), i , itSend, PendingIntent.FLAG_ONE_SHOT );            //这里requestCode和flag的设置很重要,影响数据KEY_PHONENUM的传递。用循环I值作为了requestCode。String content = mContext.getString(R.string.test); // 短信内容smsManager.sendTextMessage(contactList.get(i), null, content, mSendPI, null); //smsManager 发送短信Manager}

根据联系人循环发送短信。注意定义PendingIntent的时候,注意 requestCode  和 Flags  。

源码


0 0