Android短信查询

sms主要结构:

id => 短消息序号 如100 
thread_id => 对话的序号 如100 
address => 发件人地址,手机号.如+8613811810000 
person => 发件人,返回一个数字就是联系人列表里的序号,陌生人为null 
date => 日期  long型。如1256539465022 
protocol => 协议 0 SMS_RPOTO, 1 MMS_PROTO  
read => 是否阅读 0未读, 1已读  
status => 状态 -1接收,0 complete, 64 pending, 128 failed  
type => 类型 1是接收到的,2是已发出  
body => 短消息内容  
service_center => 短信服务中心号码编号。如+8613800755500 

查询短信是通过contentprovider实现的,例如:

查询收件箱:managedQuery(Uri.parse("content://sms/inbox");
查询发件箱:managedQuery(Uri.parse("content://sms/send");

public final static String SMS_URI_ALL =  "content://sms/";
public final static String SMS_URI_INBOX = "content://sms/inbox";
public final static String SMS_URI_SEND = "content://sms/sent";
public final static String SMS_URI_DRAFT = "content://sms/draft";
public final static String SMS_URI_OUTBOX = "content://sms/outbox";
public final static String SMS_URI_FAILED = "content://sms/failed";
public final static String SMS_URI_QUEUED = "content://sms/queued";

例子:

package com.android.study;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class ReadSMSActivity extends Activity {
	/** Called when the activity is first created. */
	private static final String LOG_TAG = "Sms Query";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		super.onCreate(savedInstanceState);
		TextView tv = (TextView) findViewById(R.id.text);

		tv.setText("");
		tv.setText(getSmsAndSendBack());
	}

	/**
	 * 读取短信
	 * 
	 * @return
	 */
	public String getSmsAndSendBack() {
		String[] projection = new String[] { "_id", "address", "person",
				"body", "type" };
		StringBuilder str = new StringBuilder();
		try {
			Cursor myCursor = managedQuery(Uri.parse("content://sms"),
					projection, null, null, "date desc");
			str.append(processResults(myCursor));
		} catch (SQLiteException ex) {
			Log.d(LOG_TAG, ex.getMessage());
		}
		return str.toString();
	}

	/**
	 * 处理短信结果
	 * 
	 */
	private StringBuilder processResults(Cursor cur) {
		// TODO Auto-generated method stub
		StringBuilder sb = new StringBuilder();
		if (cur.moveToFirst()) {

			String name;
			String phoneNumber;
			String sms;
			int type;

			int nameColumn = cur.getColumnIndex("person");
			int phoneColumn = cur.getColumnIndex("address");
			int smsColumn = cur.getColumnIndex("body");
			int typeColum = cur.getColumnIndex("type");

			do {
				// Get the field values
				name = cur.getString(nameColumn);
				phoneNumber = cur.getString(phoneColumn);
				sms = cur.getString(smsColumn);
				type = cur.getInt(typeColum);

				System.out.println("..................................");
				System.out.println("name" + name);
				System.out.println("type" + type);
				System.out.println("phoneNumber" + phoneNumber);
				System.out.println("sms" + sms);
				System.out.println("..................................");
				sb.append("{");
				sb.append(name + ",");
				sb.append(phoneNumber + ",");
				sb.append(sms);
				sb.append("}");
				if (null == sms)
					sms = "";
			} while (cur.moveToNext());
		} else {
			sb.append("no result!");
		}

		return sb;
	}
}

记得在AndroidManifest.xml中加入android.permission.READ_SMS这个permission。

暂无评论
  • 1:请一针见血的评论。
  • 2:评论需要审核通过后才能显示。
  • 3:评论字数限制在1000字以内。
  • 当前字数:0
热门文章
推荐文章
随机文章
关于本站 - 广告服务 - 版权声明 - 联系我们 - 友情链接 - 网站地图 - 帮助中心