android群发短信到通讯录所有联系人上并动态替换其中联系人信息
当我们要群发短信,而且需要替换里面的一些信息的时候(比如发送祝福短信,需要在短信里面加入对方姓名时),
做一个简单的群发短信的功能,并用通讯录里面的联系人姓名替换短信里面的#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<String> msgs = smsManager.divideMessage(strContent); // for (String msg : msgs) { // smsManager.sendTextMessage(strNo, null, msg, sentIntent, null); // } // } else { // smsManager.sendTextMessage(strNo, null, strContent, sentIntent, null); // } List<Map<String,Object>> contacts = getContact(); for(Map<String,Object> map : contacts){ strContent = strContent.replaceAll(PLACEHOLDER_NAME, getNumberName((String)map.get("textViewMobileNo"))); if (strContent.length() > 70) { List<String> 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<Map<String, Object>> getContact() { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); // 获得所有的联系人 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<String, Object> map = new HashMap<String, Object>(); 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
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- <EditText android:text="" android:layout_height="wrap_content" android:id="@+id/txNo" android:layout_width="match_parent"></EditText> --> <EditText android:text="" android:id="@+id/txContent" android:layout_width="match_parent" android:layout_alignParentLeft="true" android:layout_height="wrap_content" ></EditText> <Button android:layout_height="wrap_content" android:text="@string/send" android:layout_width="wrap_content" android:id="@+id/btnSend"></Button> <!-- <Button android:layout_height="wrap_content" android:text="@string/cancel" android:layout_width="wrap_content" android:id="@+id/btnCancel" android:layout_alignParentBottom="true"></Button> --> </LinearLayout>
values/string.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">SmartSMS</string> <string name="cancel">清空</string> <string name="send">群发</string> </resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.androidMarket.app" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Main" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.SEND_SMS" /><!--添加权限 --> <uses-permission android:name="android.permission.READ_CONTACTS" /><!--添加权限 --> </manifest>
已经在手机上实验成功了。