问题描述
- 区分 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?
解决方案
你可以使用 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;
}
时间: 2024-11-28 19:34:33