android中短信模块学习

android短信常用到的表结构如下:

Sms表:
_id:Integer
thread_id:Integer  同一会话中他们的值相同,也就是说通过thread_id来确定谁和谁在聊天
address:Text  发送人地址,即手机号
person:Integer  发件人,如果发件人在通信录,则显示姓名,陌生人为null
date:Integer  接收或发送的时间
date_send:Ingter  发送的时间
protocol:Integer 协议 0:SMS_RPOTO短信协议  1:MMS_PROTO彩信
read:Integer 0:未读   1:已读
status:Integer  短信状态  -1:接收  0:完成  64:正在发送  128:失败
type:Integer 1:接收  2:发出
reply_path_present:Integer
subject:Text  主题
body:Text 内容
service_center:Text 短信服务中心号码编号
locked:Integer
error_code:Integer
send:Integer


threads表:
_id:Integer
date:Integer 接收或发送的时间
message_count:Integer  信息数量
recipient_ids:Text 联系人ID 指向canonical_address表
snippet:Text 最后接收或发送的内容
snippet_cs:Integer 编码
read:Integer 0:未读   1:已读
type:Integer 1:接收   2:发出
error:Integer
has_attachment:Integer 是否有附件


canonical_address表:
_id:Integer
address:Text发送或接收到的电话号码


raw表:
_id:Integer
date:Integer
reference_number:Integer
count:Integer
sequence:Integer
destination_port:Integer
address:Text
pdu:Text


addr表:彩信地址
_id:
msg_id:Integer
contact_id:
address:Text
type:Integer
charset:Integer

发送短息实现如下:

@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		registerReceiver(sentMessage, new IntentFilter("SENT_SMS_ACTION"));
		registerReceiver(deliveryMessage, new IntentFilter("DELIVER_SMS_ACTION"));
	}
	
	private void sendSms(String number,String body){
		
		SmsManager smsManager=SmsManager.getDefault();
		
		Intent sentIntent=new Intent("SENT_SMS_ACTION");
		PendingIntent sentPI=PendingIntent.getBroadcast(this, 0, sentIntent, 0);
		
		Intent deliverIntent=new Intent("DELIVER_SMS_ACTION");
		PendingIntent deliverPI=PendingIntent.getBroadcast(this, 1, deliverIntent, 0);
		//大于70个字符需要拆分成多条短信
		if(body.length()>70){
			ArrayList<String> msgs=smsManager.divideMessage(body);
			for(String msg:msgs){
				//is the service center address 
				smsManager.sendTextMessage(number, null, msg, sentPI, deliverPI);
			}
		}else{
			smsManager.sendTextMessage(number, null, body, sentPI, deliverPI);
		}
		//插入到数据库中
		ContentValues values=new ContentValues();
		values.put("date", System.currentTimeMillis());
		values.put("read", 1);
		values.put("type", 2);
		values.put("address", number);
		values.put("body", body);
		getContentResolver().insert(Uri.parse("content://sms"), values);
	}
	
	private BroadcastReceiver sentMessage=new BroadcastReceiver(){

		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub
			//是否发送成功
			switch(getResultCode()){
			case 0:
				
				break;
			}
		}
		
	};
	
	private BroadcastReceiver deliveryMessage=new BroadcastReceiver() {
		
		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub
			//接收成功
		}
	};


代码中注册了两个广播:

SENT_SMS_ACTION:发送成功广播,即手机发送后,不管接收到是否接收到。

DELIVER_SMS_ACTION:接收成功广播,即接收端接收到短信。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值