Android 短信群发功能的实现
发布日期:2022-02-21 17:40:34 浏览次数:35 分类:技术文章

本文共 6235 字,大约阅读时间需要 20 分钟。

随着互联网的发展,即时通讯变得越来于重要,逢年过节都要给亲朋好友发祝贺短信,今天我们就来看一下Android如何实现群发短信。

但是在Android 4.4开始系统默认的短信应用才具备短信的手法功能,如果你的手机是4.4以上的系统,那么你就需要的到默认短信应用的权限才能使用短信的发送功能。

实现的程序不算难,程序提供了一个带列表的对话框供用户选择去发短信的对象,即收件人的电话号码。

// 记录需要群发的号码列表    ArrayList
sendList = new ArrayList
();

再使用 SmsManager 向每个电话号码依次发送短信。

for (String number : sendList)                {                    // 创建一个PendingIntent对象                    PendingIntent pi = PendingIntent.getActivity(                            MainActivity.this, 0, new Intent(), 0);                    // 发送短信                    sManager.sendTextMessage(number, null, content                            .getText().toString(), pi, null);                }                // 提示短信群发完成

以下是源代码

public class MainActivity extends Activity{
EditText numbers, content; Button select, send; SmsManager sManager; // 记录需要群发的号码列表 ArrayList
sendList = new ArrayList
(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); sManager = SmsManager.getDefault(); // 获取界面上的文本框、按钮组件 numbers = (EditText) findViewById(R.id.numbers); content = (EditText) findViewById(R.id.content); select = (Button) findViewById(R.id.select); send = (Button) findViewById(R.id.send); // 为send按钮的单击事件绑定监听器 send.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { for (String number : sendList) { // 创建一个PendingIntent对象 PendingIntent pi = PendingIntent.getActivity( MainActivity.this, 0, new Intent(), 0); // 发送短信 sManager.sendTextMessage(number, null, content .getText().toString(), pi, null); } // 提示短信群发完成 Toast.makeText(MainActivity.this, "短信群发完成" , Toast.LENGTH_SHORT).show(); } }); // 为select按钮的单击事件绑定监听器 select.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 查询联系人的电话号码 final Cursor cursor = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); BaseAdapter adapter = new BaseAdapter() { @Override public int getCount() { return cursor.getCount(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { cursor.moveToPosition(position); CheckBox rb = new CheckBox(MainActivity.this); // 获取联系人的电话号码,并去掉中间的中画线、空格 String number = cursor .getString(cursor.getColumnIndex(ContactsContract .CommonDataKinds.Phone.NUMBER)) .replace("-", "") .replace(" " , ""); rb.setText(number); // 如果该号码已经被加入发送人名单,默认勾选该号码 if (isChecked(number)) { rb.setChecked(true); } return rb; } }; // 加载list.xml布局文件对应的View View selectView = getLayoutInflater().inflate( R.layout.list, null); // 获取selectView中的名为list的ListView组件 final ListView listView = (ListView) selectView .findViewById(R.id.list); listView.setAdapter(adapter); new AlertDialog.Builder(MainActivity.this) .setView(selectView) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 清空sendList集合 sendList.clear(); // 遍历listView组件的每个列表项 for (int i = 0; i < listView.getCount(); i++) { CheckBox checkBox = (CheckBox) listView .getChildAt(i); // 如果该列表项被勾选 if (checkBox.isChecked()) { // 添加该列表项的电话号码 sendList.add(checkBox.getText() .toString()); } } numbers.setText(sendList.toString()); } }).show(); } }); } // 判断某个电话号码是否已在群发范围内 public boolean isChecked(String phone) { for (String s1 : sendList) { if (s1.equals(phone)) { return true; } } return false; }}

但是存在一个风险,如果发送的联系人过多,容易出现严重的网络延迟。

作者:宋磊

疯狂Android开发

转载地址:https://blog.csdn.net/weixin_40599987/article/details/80697682 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:访问共享文件夹
下一篇:Win7 32位旗舰版无法安装.NET 4.6.2 解决方法之一

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月09日 09时03分21秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

mysql 匹配 隔开的_按空格分隔关键字并搜索MySQL数据库 2019-04-21
java factory用法_怎样使用Java实现Factory设计模式 2019-04-21
java窗口内容如何复制_求助Java窗口菜单如何实现复制粘贴剪切等功能(内附源代码)... 2019-04-21
盾神与砝码称重java_[蓝桥杯][算法提高VIP]盾神与砝码称重 2019-04-21
java输出狗的各类信息_第九章Java输入输出操作 2019-04-21
java notify怎么用_java 如何使用notify() 2019-04-21
java加载指定文件为当前文本,java:如何使用bufferedreader读取特定的行 2019-04-21
java metrics 怎么样,Java metrics 2019-04-21
在vscode中php语言配置,Visual Studio Code C / C++ 语言环境配置 2019-04-21
php怎么翻译数据库中的中文,javascript – 如何将翻译后的文本插入数据库php 2019-04-21
普朗克公式matlab,用MATLAB实现普朗克函数积分的快捷计算.pdf 2019-04-21
swoolec+%3c?php,PHP+Swoole并发编程的魅力 2019-04-21
php 404配置,phpcms如何配置404 2019-04-21
matlab wash矩阵产生,洗衣机净衣效能与衣损程度的关系分析 2019-04-21
php中如何调用sql server,php调用SQL SERVER 2008及以上版本的方法 2019-04-21
python多线程实现kmeans,3种方式实现python多线程并发处理 2019-04-21
matlab 变量不存在,matlab程序运行时提示变量未定义 2019-04-21
php编码函数 base58,1. Base58可逆加密 2019-04-21
oracle 在需要下列之一,Oracle存储过程中PLS-00103:出现符号“/”在需要下列之一时:(... 2019-04-21
oracle10g dblink优化,Oracle10g通过dblink访问数据异常 2019-04-21