Android 群发短信的实现

版权声明:本文为博主原创文章,未经博主允许不得转载。


SmsManager是Android提供的一个服务,SmsManager提供了一系列sendXxxMessage()方法用于发送短信,不过短信通常都是普通文本,

如果我们做的app具有发送信的功能,可能有的时候会用到群发的功能。比如有一条比较好笑的段子什么的要发送给朋友,这时候就会用到群发的功能。

Android 4.4开始只有系统指定的默认短信应用才能够进行收发短信功能。如果你的手机系统是4.4以上的就需要首先获取默认的短信应用权限才能具有发送短信的功能。

实现群发短信主要有以下几个步聚

1、判断是否为4.4以上的系统 

2、如果是4.4以上的系统 判断当前app是否为默认短信app

3、如果不是默认短信app 申请成为默认短信app

4、群发短信

上代码:

判断当前应用是否为默认短信应用

public static boolean isDefaultSms(Context context) {
if (context == null) {
return false;
}
//判断是否为4.4以上的系统
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return true;
}
//获取默认的短信应用的包名

String packageName = Telephony.Sms.getDefaultSmsPackage(context);
//判断是否为空
if (TextUtils.isEmpty(packageName)) {
return false;
}
//获取当前的应用包名
String pName = context.getPackageName();
if (TextUtils.isEmpty(pName)) {
return false;
}
//判断当前app是否为默认短信应用
return packageName.equalsIgnoreCase(pName);
}



申请成为默认应用

<pre name="code" class="java"><span style="font-size:18px;">//判断是否为4.4以上的版本
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
	return;
	//申请成为默认短信
Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, context.getPackageName());
context.startActivity(intent);</span>

 

群发短信

插入数据库
		ContentValues values = new ContentValues();
		values.put("address", NumberUtils.getPhone(address)); // 发送地址
		values.put("body", body); // 消息内容
		values.put("date", System.currentTimeMillis()); // 创建时间
		values.put("type", type); // 1:接收;2:发送
		values.put("read", isRead ? 1 : 0); // 0:未读;1:已读
		values.put("seen", isRead ? 1 : 0); // 0:未查看;1:已查看
		values.put("status", 2);// 发送中
		context.getContentResolver().insert(Conversations.SMS.CONTENT_URI, values);

发送短信

	    //获取默认的smsManager
		SmsManager sms = SmsManager.getDefault();
		//分解 发送的内容
		ArrayList<String> mSMSMessage = sms.divideMessage(content);
		int messageCount = mSMSMessage.size();
		PendingIntent mSendPI = PendingIntent.getBroadcast(context, id, itSend, PendingIntent.FLAG_ONE_SHOT);
		ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>(messageCount);
		for (int i = 0; i < messageCount; i++) {
			sentIntents.add(mSendPI);
		}
		// 适配群发短信
		String[] addrs;
		if(NumberUtils.isGroup(address)){
			addrs = address.split(";");
		}else{
			addrs = new String[]{address};
		}
		for(String addr: addrs){
		    //发送短信
			sms.sendMultipartTextMessage(addr, null, mSMSMessage, sentIntents, null);
		}


好了,到此群群短信成功

当然还需要添加相应的权限
<uses-permission android:name="android.permission.SEND_SMS" />


  





  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个自己开发的Android 直接发送短信方法附上代码,Android短信功能,包括了对内容合法性的验证,发送完成弹出提示。自己开发的直接发送短信的方法:   private void sendSMS(String telNo,String smsStr,View v){    PendingIntent pi=    PendingIntent.getActivity(this, 0, new Intent(this,Sample_11_1.class), 0);    SmsManager sms=SmsManager.getDefault();    sms.sendTextMessage(telNo, null, smsStr, pi, null);    //短信发送成功给予提示    Toast.makeText(    Sample_11_1.this, //上下文    "恭喜你,短信发送成功!", //提示内容    5000 //信息显示时间    ).show();    v.setEnabled(true);//短信发送完成后恢复发送按钮的可用状态   }   对手机号码和短信内容的验证部分:   //获取输入的电话号码   EditText etTel=(EditText)findViewById(R.id.EditText02);   String telStr=etTel.getText().toString();   //获取输入的短信内容   EditText etSms=(EditText)findViewById(R.id.EditText01);   String smsStr=etSms.getText().toString();   //判断号码字符串是否合法   if(PhoneNumberUtils.isGlobalPhoneNumber(telStr)){//合法则发送短信    v.setEnabled(false);//短信发送完成前将发送按钮设置为不可用    sendSMS(telStr,smsStr,v);   }   else{//不合法则提示    Toast.makeText(    Sample_11_1.this, //上下文    "电话号码不符合格式!!!", //提示内容    5000//信息显示时间    ).show();   }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值