2 jonskeet JonSkeet 于 2013.05.24 17:41 提问

区分 sms 中的 inbox 和 sentsms

我创建了一个android程序。在程序中需要列出所有的会话。每个会话包含所有的sms号码。因此我需要区分sms中的inbox和sentsms。
下面的代码用于寻找inbox和sent:

content://sms/inbox
content://sms/sent

但是我不想使用这个方法,我通过使用api列出所有的sms

content://sms/

我使用 columnindex的 type和address 来测试。但是总是给出inbox 和 outbox相同的结果。

Uri SMS_INBOX = Uri.parse("content://sms");
        c = getContentResolver().query(SMS_INBOX, null, "thread_id" + " = "
                        + "3", null,
                        "date" + " ASC");
        if(c.moveToFirst()){
            count.add(c.getCount());
            for(int j=0;j<c.getCount();j++){
                System.out.println(c.getString(c.getColumnIndexOrThrow("body")).toString());
                System.out.println("new   person=="+c.getColumnIndex("person")+"type=="+c.getColumnIndexOrThrow("type"));
                c.moveToNext();
            }
        }
        c.close();

请问如何区分 sms 中的 inbox 和 sentsms?

1个回答

LiDaming_and
LiDaming_and   2013.05.27 10:03

你可以使用 ContentObserver 来追踪发送和接收信息。
重写 ContentObserver 中的 onChange()方法,获得响应的 sms 类型:

Cursor cursor = mContext.getContentResolver().query(Uri
                             .parse("content://sms"), null, null, null, null);

String type = cursor.getColumnIndex("type");
if(cursor.getString(type).equalsIgnoreCase("1")){
    // 接收sms
 }
 else if(cursor.getString(type).equalsIgnoreCase("2")){
    //发送 sms 
 }

给 SMS 登记 ContentObserver

ContentResolver observer = this.getContentResolver();
observer.registerContentObserver(Uri.parse("content://sms"), 
                               true, new MySMSObserver(new Handler(),this));

MySMSObserver 会使用 Constructor 继承 ContentObserver,Handler and Context作为参数。

public MySMSObserver(Handler handler, Context context) {
        super(handler);
        this.context = context;
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
android中短信协议与字段
content://sms/inbox        收件箱 content://sms/sent        已发送 content://sms/draft        草稿 content://sms/outbox        发件箱 content://sms/failed        发送失败 content://sms/queued        待发送列表 数据
Android短信开发相关信息记录
相关的协议:content://sms/inbox        收件箱 content://sms/sent        已发送 content://sms/draft        草稿 content://sms/outbox        发件箱 content://sms/failed        发送失败 content://sms/queued
android 中管理短信
不能直接访问数据库,只能通过协议来访问数据库了,         先贴出相关的协议:         content://sms/inbox        收件箱  content://sms/sent        已发送  content://sms/draft        草稿  content://sms/outbox        发件箱  content://sms/fa
android sms详解
一、 android sms所要的权限 java代码:     复制代码         二、 sms发送          与短消息发送相关的类为:SmsManager.  java代码: SmsManager.sendTextMessage(destinationAddress, scAddress, text, se
SmsDemo短信例子程序说明
SmsDemo短信例子程序说明 今天测试了黑莓开发工具内置的SmsDemo例子程序,这是一个非常好的短信收发程序例子。 导入方法:eclipse开发工具 菜单 File -> Import -> Import BlackBerry Samples SmsDemo可以发送短信给手机Inbox,也可以发送短信给手机特定端口,可以收短信,收特定端口3590的短信。使用方法:启动程序后,提示 Send m
android学习笔记25--------------短信的各种操作操作
转载请注明原文出处:http://blog.csdn.net/yf210yf 1.注册广播接收器  import android.content.BroadcastReceiver; import android.content.Context; import android.c
Android ContentObserver监听短信提取验证码
观察者模式是软件设计模式中的一种,在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。 这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。 观察者模式(Observer)完美的将观察者和被观察的对象分离开,在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。 观察者设计模式定义了对象间的一种一对多的依赖关系,以便
android短信模块详解
为了看代码方便,一边在网上google资料,一边看Android java 源代码。 偶然发现了一个类MmsSmsDatabaseHelper.java,原来android将所有的短信信息都存入了mmssms.db中。 公开的SDK中没有这个类,不能直接使用。于是自己写了一个SQLiteOpenHelper,但是查询的时候发生SQL异常。 看来不能为所欲为了,不过据网上资料介绍可以拷贝db文
android基础总结篇之七:ContentProvider之读写短消息
今天我们来讲一下如何利用ContentProvider读写短消息。 上次我们讲了如何通过ContentProvider机制读写联系人,通过读取联系人信息和添加联系人这两种方式对联系人进行操作,相信大家对ContentProvider的基本使用方法也有所了解了。在Android中ContentProvider应用场合还很多,读写短消息就是其中一个,今天我们就来探讨一下利用ContentProv
关于MMS,SMS常用的Uri
转自http://www.cnblogs.com/kakafra/archive/2012/10/06/2713327.html   Android提供了很多查询系统数据的Uri,这里是一些关于MMS,SMS常用的Uri以及对其的一些分析 Uri: content://sms sql语句: SELECT * FROM sms WHERE ({where}) O