当我们要群发短信,而且需要替换里面的一些信息的时候(比如发送祝福短信,需要在短信里面加入对方姓名时),做一个简单的群发短信的功能,并用通讯录里面的联系人姓名替换短信里面的#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>
已经在手机上实验成功了。
分享到:
相关推荐
在Android平台上实现短信群发是一项常见的任务,尤其在开发企业级应用或营销工具时。这里,我们将深入探讨如何实现这个功能,以及与单发短信的区别。 首先,理解短信群发的基本概念是至关重要的。短信群发是指一次...
综上所述,这个程序结合了Android系统的多种核心功能,如通讯录访问、短信和邮件发送,以及UI设计和性能优化,对于学习Android应用开发,尤其是涉及到通信功能的开发者来说,这是一个有价值的参考示例。
在Android平台上,开发一个短信发送应用是一个常见的任务,尤其对于初学者来说,它是一个很好的实践项目,可以...同时,这个程序也可以作为一个基础模块,进一步扩展成具有更多功能的应用,如群发短信、读取联系人等。
7. **跨平台兼容性**:考虑到用户可能在不同设备间切换,良好的通讯录管理方案应具备跨平台兼容性,使用户在Android、iOS或其他系统上都能无缝地管理他们的联系人分组。 8. **扩展功能**:现代的联系人管理可能还...
群发短信服务通常由短信平台提供,它们允许用户上传联系人列表,创建短信模板,并设定发送时间和频率。为了确保效率和避免被视为垃圾短信,群发短信时需遵循相关的法规和最佳实践,如获取接收者的同意、设置合理的...
可以对通讯录中的联系人添加到应用群组中,支持组群发。可以对未回复人进行电话或者短信通知。本项目还可以用在会议通知、企业通知下发、聚会活动统计等场景中。UI不错,实用性90分。总体来说是一套很不错的项目。 ...
用户可以通过输入号码或选择联系人来发送短信,并可轻松删除不需要的短信,保持收件箱的整洁。 4. **快速搜索功能**:为了帮助用户迅速找到特定的短信,智能短信管理器配备了搜索功能。用户可以通过关键词搜索短信...
通过以上步骤,你可以高效地管理和利用你的联系人信息,轻松实现批量发送邮件给特定的联系人群组,这对于企业内部沟通或者对外营销邮件来说非常实用。记得在群发邮件时,根据需要调整邮件内容,确保其针对性和适宜性...
在通讯录软件中,数据库是存储联系人信息的基础。"TelephoneBook.mdf"和"TelephoneBook_log.LDF"这两个文件名暗示了该软件可能采用了Microsoft SQL Server Compact Edition作为其数据库引擎。".mdf"是主数据文件,而...
其中,短信和彩信作为高效、快捷的信息传递手段,已广泛应用于企业的日常运营和营销活动中。"SMS.rar_彩信平台_短信_短信信箱_通讯录"这一文件集合,揭示了一个专为中小型企事业单位打造的短信彩信信息平台,旨在...
标题提到的“不调用iOS自带发送短信通讯录”实际上是指如何在App内部实现发送短信的功能,而不依赖于系统默认的短信应用,并且可能涉及到获取和选择联系人(即通讯录)的方式。在iOS中,这种自定义行为需要遵循Apple...
本文将深入探讨如何实现“短信群发并保存到短信库中”的功能。首先,我们要理解安卓系统的短信管理机制,然后通过API来构建这一功能。 1. 安卓短信服务基础 安卓系统提供了一套完整的API来处理短信相关操作,包括...
4. **FH.mdb**:这是Access数据库文件,很可能用于存储用户的所有联系人信息。Access数据库具有良好的数据管理和查询能力,非常适合此类应用。 5. **登陆口令:fh密码:fh.txt**:这个文件可能是软件的登录凭据,...
2. 数据库管理:系统通常需要存储用户信息、联系人列表、发送记录等数据,这需要使用到数据库技术。C#可以轻松连接SQL Server、MySQL、SQLite等数据库,进行数据的读写操作。 3. 网络通信:短信发送涉及与短信网关...
短信群发源码是一种用于批量发送短信的程序代码,它简化了传统手动发送短信的过程,大大提升了效率。在IT行业中,这种技术常被应用于市场营销、客户服务、活动通知等多种场景。以下将详细介绍短信群发源码及其相关...
传统飞信需要用户手动输入对方手机号码并验证才能添加好友,而这款应用简化了这一过程,可能通过API自动获取或导入联系人信息,快速建立飞信好友关系,使得信息传递更为流畅。 再者,第三方API的运用是实现这些功能...
关于android中联系人模块的资料,大家可以通过该论文了解android的基本知识
在Android平台上,开发一个简易的短信管理器是常见的任务,涉及到的主要知识点包括Android系统的权限管理、BroadcastReceiver(广播接收者)、SMSManager类以及UI设计。下面将详细解释这些概念及其在实现短信管理器...
在Android平台上,开发一款能够发送短信的应用程序是一个常见的需求。这个"发短信小例子"就是一个简单的实现,旨在帮助开发者理解如何在Android应用中集成短信发送功能。下面将详细讲解这个功能的实现步骤、核心代码...
这有助于用户更好地管理和利用他们的联系人信息,比如同步到各种社交应用、邮件客户端,或者进行群发消息等操作。下面将详细介绍如何实现这个功能,并涉及一些核心知识点。 1. **Android联系人API** Android提供了...