`

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>

 

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

 

 

分享到:
评论

相关推荐

    android 短信群发

    在Android平台上实现短信群发是一项常见的任务,尤其在开发企业级应用或营销工具时。这里,我们将深入探讨如何实现这个功能,以及与单发短信的区别。 首先,理解短信群发的基本概念是至关重要的。短信群发是指一次...

    android 群发短信和邮件

    综上所述,这个程序结合了Android系统的多种核心功能,如通讯录访问、短信和邮件发送,以及UI设计和性能优化,对于学习Android应用开发,尤其是涉及到通信功能的开发者来说,这是一个有价值的参考示例。

    Android上实现的发送短信应用程序

    在Android平台上,开发一个短信发送应用是一个常见的任务,尤其对于初学者来说,它是一个很好的实践项目,可以...同时,这个程序也可以作为一个基础模块,进一步扩展成具有更多功能的应用,如群发短信、读取联系人等。

    电信设备-通讯录中联系人的分组方法、装置和移动终端.zip

    7. **跨平台兼容性**:考虑到用户可能在不同设备间切换,良好的通讯录管理方案应具备跨平台兼容性,使用户在Android、iOS或其他系统上都能无缝地管理他们的联系人分组。 8. **扩展功能**:现代的联系人管理可能还...

    发送短信,长短信,群发短信

    群发短信服务通常由短信平台提供,它们允许用户上传联系人列表,创建短信模板,并设定发送时间和频率。为了确保效率和避免被视为垃圾短信,群发短信时需遵循相关的法规和最佳实践,如获取接收者的同意、设置合理的...

    监测群发短信源码.zip

    可以对通讯录中的联系人添加到应用群组中,支持组群发。可以对未回复人进行电话或者短信通知。本项目还可以用在会议通知、企业通知下发、聚会活动统计等场景中。UI不错,实用性90分。总体来说是一套很不错的项目。 ...

    Android智能短信管理器

    用户可以通过输入号码或选择联系人来发送短信,并可轻松删除不需要的短信,保持收件箱的整洁。 4. **快速搜索功能**:为了帮助用户迅速找到特定的短信,智能短信管理器配备了搜索功能。用户可以通过关键词搜索短信...

    CSV文件导入邮件联系人到OUTLOOK2007及分组群发方法

    通过以上步骤,你可以高效地管理和利用你的联系人信息,轻松实现批量发送邮件给特定的联系人群组,这对于企业内部沟通或者对外营销邮件来说非常实用。记得在群发邮件时,根据需要调整邮件内容,确保其针对性和适宜性...

    功能强大的通讯录软件

    在通讯录软件中,数据库是存储联系人信息的基础。"TelephoneBook.mdf"和"TelephoneBook_log.LDF"这两个文件名暗示了该软件可能采用了Microsoft SQL Server Compact Edition作为其数据库引擎。".mdf"是主数据文件,而...

    SMS.rar_彩信平台_短信_短信信箱_通讯录

    其中,短信和彩信作为高效、快捷的信息传递手段,已广泛应用于企业的日常运营和营销活动中。"SMS.rar_彩信平台_短信_短信信箱_通讯录"这一文件集合,揭示了一个专为中小型企事业单位打造的短信彩信信息平台,旨在...

    不调用ios自带发送短信通讯录

    标题提到的“不调用iOS自带发送短信通讯录”实际上是指如何在App内部实现发送短信的功能,而不依赖于系统默认的短信应用,并且可能涉及到获取和选择联系人(即通讯录)的方式。在iOS中,这种自定义行为需要遵循Apple...

    短信群发并保存到短信库中

    本文将深入探讨如何实现“短信群发并保存到短信库中”的功能。首先,我们要理解安卓系统的短信管理机制,然后通过API来构建这一功能。 1. 安卓短信服务基础 安卓系统提供了一套完整的API来处理短信相关操作,包括...

    个人通讯录

    4. **FH.mdb**:这是Access数据库文件,很可能用于存储用户的所有联系人信息。Access数据库具有良好的数据管理和查询能力,非常适合此类应用。 5. **登陆口令:fh密码:fh.txt**:这个文件可能是软件的登录凭据,...

    C# 短信群发系统

    2. 数据库管理:系统通常需要存储用户信息、联系人列表、发送记录等数据,这需要使用到数据库技术。C#可以轻松连接SQL Server、MySQL、SQLite等数据库,进行数据的读写操作。 3. 网络通信:短信发送涉及与短信网关...

    短信群发源码,支持一键导入、一键发送

    短信群发源码是一种用于批量发送短信的程序代码,它简化了传统手动发送短信的过程,大大提升了效率。在IT行业中,这种技术常被应用于市场营销、客户服务、活动通知等多种场景。以下将详细介绍短信群发源码及其相关...

    android飞信群发助手

    传统飞信需要用户手动输入对方手机号码并验证才能添加好友,而这款应用简化了这一过程,可能通过API自动获取或导入联系人信息,快速建立飞信好友关系,使得信息传递更为流畅。 再者,第三方API的运用是实现这些功能...

    基于Android手机群删联系人模块的设计与实现

    关于android中联系人模块的资料,大家可以通过该论文了解android的基本知识

    简易的android短信管理器代码

    在Android平台上,开发一个简易的短信管理器是常见的任务,涉及到的主要知识点包括Android系统的权限管理、BroadcastReceiver(广播接收者)、SMSManager类以及UI设计。下面将详细解释这些概念及其在实现短信管理器...

    发短信小例子(Android)

    在Android平台上,开发一款能够发送短信的应用程序是一个常见的需求。这个"发短信小例子"就是一个简单的实现,旨在帮助开发者理解如何在Android应用中集成短信发送功能。下面将详细讲解这个功能的实现步骤、核心代码...

    自己的通讯录加入系统通讯录

    这有助于用户更好地管理和利用他们的联系人信息,比如同步到各种社交应用、邮件客户端,或者进行群发消息等操作。下面将详细介绍如何实现这个功能,并涉及一些核心知识点。 1. **Android联系人API** Android提供了...

Global site tag (gtag.js) - Google Analytics