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

android 发送短信的方法


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

		Intent smsIntent = new Intent(Intent.ACTION_VIEW);
		smsIntent.setData(Uri.parse("smsto:"));
		smsIntent.setType("vnd.android-dir/mms-sms");//必须指定type
		smsIntent.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() {
			@Override
			public 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() {
			@Override
			public 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
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值