`

在程序中发送短信,并写入短信数据库

 
阅读更多

效果如下:

 

我们经常在应用中有这样的需要:发送短信邀请其他人使用。当然,你可以调用系统发送短信的界面,也可以在自己的应用程序中进行发送,并写入短信数据库(如果不写,那么发送短信后,短信数据库中是没有记录的)。今天我们就来看看如何实现。

 

下面直接上代码:

/**
 * This demo shows how to send message in self application.
 * 
 * 这个demo展示了如何在自己的程序中发送短信
 * 
 *	参考:http://stackoverflow.com/questions/8447735/android-sms-type-constants
 *	MESSAGE_TYPE_ALL    = 0;//发送(和2一个效果)
 *	MESSAGE_TYPE_INBOX  = 1;//接收
 *	MESSAGE_TYPE_SENT   = 2;//发送
 *	MESSAGE_TYPE_DRAFT  = 3;//存在草稿箱中
 *	MESSAGE_TYPE_OUTBOX = 4;//待发箱(和发送中一个效果)
 *	MESSAGE_TYPE_FAILED = 5; // for failed outgoing messages发送失败
 *	MESSAGE_TYPE_QUEUED = 6; // for messages to send later//发送中
 * 
 *  ContentValues values = new ContentValues();
 *  values.put("address", "13023895555");
 *  values.put("body", "short message content");
 *  values.put("date", "1322039220502");
 *  values.put("type", "1");
 *  values.put("status", "-1");
 *  values.put("read", "1");
 *  values.put("protocol", "0");
 *  getContentResolver().insert(Uri.parse("content://sms"), values);
 * 
 * 
 * @author MichaelYe
 * @since 2012-8-30
 * 
 * */
public class MainActivity extends Activity 
{

	private EditText etNumber;
	private EditText etSmsContent;
	private Button btnSend;
	private Button btnCancel;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etNumber = (EditText)findViewById(R.id.et_number);
        etSmsContent = (EditText)findViewById(R.id.et_sms_content);
        btnSend = (Button)findViewById(R.id.btn_send);
        btnCancel = (Button)findViewById(R.id.btn_cancel);
        
        btnSend.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {

				String phoneNumber = etNumber.getText().toString().trim();
				if(phoneNumber.equals(""))
				{
					Toast.makeText(MainActivity.this, "Number can not be empty!", Toast.LENGTH_SHORT).show();
					return;
				}
				else
				{
					String smsContent = etSmsContent.getText().toString().trim();
					sendSms(phoneNumber, smsContent);
					writeToDataBase(phoneNumber, smsContent);
				}
			}
		});
        btnCancel.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				finish();
			}
		});
    }

    /**
     * send sms
     * 
     * 发送短信
     * 
     * */
    private void sendSms(String phoneNumber, String smsContent)
    {
        
        //当文本超过限定字符长度的时候(中文70,英文160),在2.2中会nullpoint,4.1.1中发送无效
        //SmsManager smsManager = SmsManager.getDefault();
        //smsManager.sendTextMessage(phoneNumber, null, smsContent, null, null);
          
        //改为sendMultipartTextMessage()
        ArrayList<String> messageArray = smsManager.divideMessage(smsContent);
    	smsManager.sendMultipartTextMessage(phoneNumber, null, messageArray, null, null);

        Toast.makeText(this, "Send Success", Toast.LENGTH_LONG).show();
    }
    
    /**
     * write to database
     * 
     * 写入数据库
     * 
     * */
    private void writeToDataBase(String phoneNumber, String smsContent)
    {
    	ContentValues values = new ContentValues();
        values.put("address", phoneNumber);
        values.put("body", smsContent);
        values.put("type", "2");
        values.put("read", "1");//"1"means has read ,1表示已读
        getContentResolver().insert(Uri.parse("content://sms/inbox"), values);
    }

}

 

布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <EditText
        android:id="@+id/et_number"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/number_hint"
        android:inputType="number"
        android:paddingLeft="20dip"
        android:paddingRight="20dip" />

    <EditText
        android:id="@+id/et_sms_content"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/et_number"
        android:hint="@string/sms_hint"
        android:paddingLeft="20dip"
        android:paddingRight="20dip" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/et_sms_content"
        android:orientation="horizontal"
        android:paddingLeft="20dip"
        android:paddingRight="20dip" >

        <Button
            android:id="@+id/btn_send"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:paddingLeft="5dip"
            android:paddingRight="5dip"
            android:text="@string/btn_send" />

        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:paddingLeft="5dip"
            android:paddingRight="5dip"
            android:text="@string/btn_cancel" />
    </LinearLayout>

</RelativeLayout>

 

注意权限:

	<uses-permission android:name="android.permission.SEND_SMS"/>
	<uses-permission android:name="android.permission.WRITE_SMS"/>
	<uses-permission android:name="android.permission.READ_SMS"/>

 

注意:测试的时候可以新建两个模拟器测试下,模拟器左上角的端口号就是电话号码。比如:5554

 

工程下载地址:

https://github.com/michaelye/DemoSendSms

 

 

  • 大小: 185.8 KB
分享到:
评论
3 楼 wv1124 2014-09-02  
wv1124 写道
真机可以么?

试了一下,真机可以写入短信记录,不错
2 楼 wv1124 2014-09-02  
真机可以么?
1 楼 绝无仅有的霸气 2014-06-13  
getContentResolver().insert(Uri.parse("content://sms/inbox"), values);
这句是不是用//sms/outbox?

相关推荐

    Android实现将已发送的短信写入短信数据库的方法

    短信是手机常见的功能,本文就以实例形式讲述了Android实现将已发送的短信写入短信数据库的方法。分享给大家供大家参考之用。具体如下: 一般来说,把短信发送出去以后,需要把已发送的短信写入短信数据库。短信...

    短信猫数据库配置

    在IT领域,特别是针对短信服务系统与数据库交互的场景中,“短信猫数据库配置”是一个非常重要的环节。本文将深入探讨这一主题,包括如何配置短信猫连接到不同的数据库(如Oracle、MySQL、SQLServer等),以及具体的...

    一个短信程序

    在本程序中,短信猫起到了接口的作用,它连接到计算机并允许程序通过它来发送短信。通过VB6的串行通信技术,程序可以读取和写入短信猫的端口,从而实现短信的收发。 短信平台程序的实现主要包括以下几个关键知识点...

    安卓短信操作Demo

    1. **安卓短信数据库**: 安卓系统将短信存储在一个SQLite数据库中,主要的表是`sms`,包含了短信的各种信息,如:`thread_id`(线程ID)、`address`(发送者或接收者的电话号码)、`body`(短信内容)、`date`(发送或接收...

    “短信二次开发数据库接口v4.3”使用说明书

    - **自定义数据库**: 可以根据提供的数据库结构在其他任何数据库中创建相应的表,并通过修改`SET.INI`文件中的`database`值来建立连接。 #### 五、接口功能详述 - **OutBox表**: 待发短信列表。在此表中插入记录...

    手机短信猫接口及其应用程序的开发

    开发者在编写程序时可以选择VB、VC、JAVA等多种编程语言,发送短信的机制相对简单,只需向特定数据库表中写入包含短信内容和接收方手机号码等信息的记录即可。 实际应用中,广州石化曾将短信接口与HP OpenView网络...

    书友会短信发送系统VB+SQL Server 2000

    在数据库中,这可能是一个短信模板表,存储模板ID、模板内容和适用场景。 3. 发送任务调度:根据设定的时间或触发条件自动发送短信。这可能需要VB实现定时器组件,配合SQL Server的存储过程或触发器,以定时执行...

    PB发短信的源程序

    3. API集成:如何在PB中集成短信服务提供商的API,实现发送短信的功能。 4. 用户界面设计:如何利用PB的GUI工具设计友好的短信发送界面。 5. 数据库连接和操作:如何配置数据库连接,读取和写入短信相关的数据。 6. ...

    短信猫发送源码

    在项目中,源码涉及到与数据库的交互,这通常包括数据的读取、写入、更新和删除操作。可能使用的数据库系统有SQL Server、MySQL、SQLite等。开发者使用ADO.NET或者其他ORM框架(如Entity Framework)来建立C#程序与...

    短信管理器

    - 在Android系统中,读取和写入短信、联系人等敏感信息需要申请相应的权限,例如READ_SMS、WRITE_SMS和READ_CONTACTS。开发者需要在AndroidManifest.xml文件中声明这些权限。 3. Android UI设计: - 使用Android ...

    MAS二次开发说明(数据库结构)

    这种方式要求用户允许MAS访问其数据库,并在数据库中创建一张专门的表用于存放待发送的数据。MAS定期轮询这张表并将数据发送出去。由于涉及到用户数据库的直接访问,这种方法可能会对数据安全性带来一定风险,因此...

    书友会短信发送系统

    在本系统中,开发者可能通过调用短信猫提供的SDK或者自行编写驱动程序,实现了与短信猫的通信,从而实现了自动化发送和接收短信的功能。 2. **INI文件操作**:INI文件是一种简单的配置文件格式,常用于存储应用程序...

    安卓短信彩信相关相关-短信拦截应用程序源码学习研究用研究用别人安装激活后拦截全部短信在别人手机不显示短信。.rar

    这些规则会被保存在SharedPreferences或数据库中,以便后续的短信拦截逻辑进行查询。 此外,考虑到描述中提到的"别人手机不显示短信",这可能涉及到对系统级别的短信应用的替换。在Android 4.4之前,可以通过设定...

    报警发送短信

    当发送短信过程中遇到网络问题、超时或服务端错误时,系统应能适当地捕获并处理这些异常,同时向用户反馈错误信息。 7. **测试与调试**:开发完成后,需要对系统进行全面的测试,包括单元测试、集成测试和系统测试...

    java发送短信系列之限制日发送次数

    综上所述,通过设计合理的数据表结构,配合限流和动态表策略,可以有效地限制Java应用程序中同一用户每日发送短信的次数,同时保持系统的稳定性和性能。在实际应用中,还需考虑更多的安全和性能优化措施。

    Android程序研发源码一个短信应用源码.zip

    3. **ContentProvider**:在Android中,短信数据通常存储在系统的SQLite数据库中,通过ContentProvider进行访问。源码中可能会有一个自定义的ContentProvider,用于读取和写入短信数据,或者直接使用系统提供的`SMS ...

    Android 电话及短信的监听程序源码.rar

    短信监听则需要`READ_SMS`和`WRITE_SMS`权限,用于读取和写入短信。在AndroidManifest.xml文件中,开发者必须明确声明这些权限。 2. **电话状态监听器**: 使用`TelephonyManager`类可以监听电话状态的变化。注册...

    symbian短信读取及回写收件箱程序

    4. 回写:读取.txt文件,解析短信内容,然后使用Mbmsservice类的接口将短信插入到收件箱数据库中。 由于描述中提到了回写功能的不足,开发者可能需要解决以下几个问题: - 文件解析:确保程序能正确解析.txt文件中...

    SMS.rar_android_android sms_android 短信_短信拦截

    在Android系统中,短信服务是核心功能之一,它允许用户收发短信,同时开发者可以通过API接口进行相关的应用程序开发。本文将深入探讨Android平台上的短信功能,特别是如何在Android应用中实现短信拦截,以及有序广播...

    收发送短信

    3. **通讯录管理**:联系人或客户信息存储在SQL Server 2000数据库中,可能包含姓名、电话号码等字段。使用ADO.NET或者其他ORM框架(如Entity Framework)连接数据库,进行数据的读取、写入操作。 4. **数据库设计*...

Global site tag (gtag.js) - Google Analytics