博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android群发短信到通讯录所有联系人上并动态替换其中联系人信息
阅读量:6226 次
发布时间:2019-06-21

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

    当我们要群发短信,而且需要替换里面的一些信息的时候(比如发送祝福短信,需要在短信里面加入对方姓名时),

做一个简单的群发短信的功能,并用通讯录里面的联系人姓名替换短信里面的#name#字符串,然后发送短信

代码如下:

   main.java

    

package org.androidMarket.app;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.app.PendingIntent;import android.content.Intent;import android.database.Cursor;import android.os.Bundle;import android.provider.ContactsContract;import android.telephony.SmsManager;import android.view.Display;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class Main extends Activity {    /** Called when the activity is first created. */    private EditText            txtNo;    private EditText            txtContent;    private Button              btnSend;    private Button              btnCancel;    private final static String PLACEHOLDER_NAME = "#name#";    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);//        txtNo = (EditText) findViewById(R.id.txNo);        txtContent = (EditText) findViewById(R.id.txContent);        btnSend = (Button) findViewById(R.id.btnSend);//        btnCancel = (Button) findViewById(R.id.btnCancel);                Display d = getWindowManager().getDefaultDisplay();        txtContent.setHeight((int) (d.getHeight() * 0.5));        btnSend.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {//                String strNo = txtNo.getText().toString();                String strContent = txtContent.getText().toString();                SmsManager smsManager = SmsManager.getDefault();                PendingIntent sentIntent = PendingIntent.getBroadcast(Main.this, 0, new Intent(), 0);                                // 如果字数超过70,需拆分成多条短信发送//                if (strContent.length() > 70) {//                    List
msgs = smsManager.divideMessage(strContent);// for (String msg : msgs) {// smsManager.sendTextMessage(strNo, null, msg, sentIntent, null);// }// } else {// smsManager.sendTextMessage(strNo, null, strContent, sentIntent, null);// } List
> contacts = getContact(); for(Map
map : contacts){ strContent = strContent.replaceAll(PLACEHOLDER_NAME, getNumberName((String)map.get("textViewMobileNo"))); if (strContent.length() > 70) { List
msgs = smsManager.divideMessage(strContent); for (String msg : msgs) { smsManager.sendTextMessage((String)map.get("textViewMobileNo"), null, msg, sentIntent, null); } } else { smsManager.sendTextMessage((String)map.get("textViewMobileNo"), null, strContent, sentIntent, null); } } Toast.makeText(Main.this, "短信发送完成", Toast.LENGTH_LONG).show(); } }); // btnCancel.setOnClickListener(new View.OnClickListener() {//// @Override// public void onClick(View v) {// txtNo.setText(null);// txtContent.setText(null);// }// }); // TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); // StringBuilder sb = new StringBuilder(); // sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId()); // sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion()); // sb.append("\nLine1Number = " + tm.getLine1Number()); // sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso()); // sb.append("\nNetworkOperator = " + tm.getNetworkOperator()); // sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName()); // sb.append("\nNetworkType = " + tm.getNetworkType()); // sb.append("\nPhoneType = " + tm.getPhoneType()); // sb.append("\nSimCountryIso = " + tm.getSimCountryIso()); // sb.append("\nSimOperator = " + tm.getSimOperator()); // sb.append("\nSimOperatorName = " + tm.getSimOperatorName()); // sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber()); // sb.append("\nSimState = " + tm.getSimState()); // sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId()); // sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber()); // Log.e("info", sb.toString()); } public List
> getContact() { List
> list = new ArrayList
>(); // 获得所有的联系人 Cursor cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); // 循环遍历 if (cur.moveToFirst()) { int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID); int displayNameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); do { Map
map = new HashMap
(); map.put("choose", false); // 获得联系人的ID号 String contactId = cur.getString(idColumn); // 获得联系人姓名 String disPlayName = cur.getString(displayNameColumn); map.put("textViewName", disPlayName); System.out.println("联系人姓名:" + disPlayName); // 查看该联系人有多少个电话号码。如果没有这返回值为0 String phoneNumber = ""; int phoneCount = cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); if (phoneCount > 0) { // 获得联系人的电话号码 Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); if (phones.moveToFirst()) { do { // 遍历所有的电话号码 phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); System.out.println("联系人电话:" + phoneNumber); } while (phones.moveToNext()); map.put("textViewMobileNo", phoneNumber); } } list.add(map); } while (cur.moveToNext()); } return list; } public String getNumberName(String phoneNumber){ // 获得联系人的电话号码 Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.NUMBER + " = " + phoneNumber, null, null); if (phones.moveToFirst()) { do { // 遍历所有的电话号码 String displayName = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); System.out.println("联系人电话:" + phoneNumber); System.out.println("联系人名称:" + displayName); return displayName; } while (phones.moveToNext()); } return null; }}

layout/main.xml

values/string.xml

SmartSMS
清空
群发
AndroidManifest.xml

已经在手机上实验成功了。

转载于:https://www.cnblogs.com/secbook/archive/2011/07/18/2655195.html

你可能感兴趣的文章
LeetCode 141, 142. Linked List Cycle I+II
查看>>
管道函数
查看>>
14.多线程设计模式 - Master-Worker模式
查看>>
机器学习实战——k-近邻算法
查看>>
设计模式——单例模式
查看>>
240. Search a 2D Matrix II
查看>>
php-预定义
查看>>
IntelliTrace 调试、定位异常
查看>>
linux Shell脚本编码格式
查看>>
String方法
查看>>
冲刺第五天
查看>>
php操作mysql与sqlite类
查看>>
Bitmap压缩到指定尺寸大小,获取圆角、圆形图片
查看>>
解决:模态框中使用select2下拉选项无法搜索
查看>>
LeetCode OJ:Min Stack(最小栈问题)
查看>>
什么是FPGA,PAL,EPLD?
查看>>
OO第一次博客作业
查看>>
计算机发展史简述
查看>>
wpf 遍历控件及其值
查看>>
Unity5.6.4f1 配置WebGL教程
查看>>