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");
Java代碼
public final static String
SMS_URI_ALL = "content://sms/"; //0
public final static String SMS_URI_INBOX = "content://sms/inbox";//1
public final static String SMS_URI_SEND = "content://sms/sent";//2
public final static String SMS_URI_DRAFT = "content://sms/draft";//3
public final static String SMS_URI_OUTBOX = "content://sms/outbox";//4
public final static String SMS_URI_FAILED = "content://sms/failed";//5
public final static String SMS_URI_QUEUED = "content://sms/queued";//6
例子:package com.shao.sms;</p><p>import android.app.Activity;<br />import android.database.Cursor;<br />import android.database.sqlite.SQLiteException;<br />import android.net.Uri;<br />import android.os.Bundle;<br />import android.util.Log;<br />import android.widget.TextView;</p><p>public class ReadSMSActivity extends Activity {<br />/** Called when the activity is first created. */<br />private static final String LOG_TAG = "Sms Query";</p><p>@Override<br />public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);<br /> super.onCreate(savedInstanceState);<br /> TextView tv = (TextView) findViewById(R.id.text);</p><p> tv.setText("");<br /> tv.setText(getSmsAndSendBack());<br />}<br />/**<br />* 讀取簡訊<br />* @return<br />*/<br />public String getSmsAndSendBack()<br />{<br /> String[] projection = new String[] {<br /> "_id",<br /> "address",<br /> "person",<br /> "body",<br /> "type"<br /> };<br /> StringBuilder str=new StringBuilder();<br /> try{<br /> Cursor myCursor = managedQuery(Uri.parse("content://sms"),<br /> projection,<br /> null, null , "date desc");<br /> str.append(processResults(myCursor));<br /> }<br /> catch (SQLiteException ex)<br /> {<br /> Log.d(LOG_TAG, ex.getMessage());<br /> }<br /> return str.toString();<br />}<br />/**<br />* 處理簡訊結果<br />*<br />*/<br />private StringBuilder processResults(Cursor cur) {<br /> // TODO Auto-generated method stub<br /> StringBuilder sb=new StringBuilder();<br /> if (cur.moveToFirst()) {</p><p> String name;<br /> String phoneNumber;<br /> String sms;<br /> int type;</p><p> int nameColumn = cur.getColumnIndex("person");<br /> int phoneColumn = cur.getColumnIndex("address");<br /> int smsColumn = cur.getColumnIndex("body");<br /> int typeColum = cur.getColumnIndex("type");</p><p> do {<br /> // Get the field values<br /> name = cur.getString(nameColumn);<br /> phoneNumber = cur.getString(phoneColumn);<br /> sms = cur.getString(smsColumn);<br /> type = cur.getInt(typeColum);</p><p> System.out.println("..................................");<br /> System.out.println("name"+name);<br /> System.out.println("type"+type);<br /> System.out.println("phoneNumber"+phoneNumber);<br /> System.out.println("sms"+sms);<br /> System.out.println("..................................");<br /> sb.append("{");<br /> sb.append(name+",");<br /> sb.append(phoneNumber+",");<br /> sb.append(sms);<br /> sb.append("}");<br /> if (null==sms)<br /> sms="";<br /> } while (cur.moveToNext());<br /> }<br /> else<br /> {<br /> sb.append("no result!");<br /> }</p><p> return sb;<br />}<br />}
記得在AndroidManifest.xml中加入android.permission.READ_SMS這個permission
<uses-permission android:name="android.permission.READ_SMS" />