Android短信查询(二)——利用ContentObserver实现短信查询
发布日期:2021-06-30 11:15:02 浏览次数:2 分类:技术文章

本文共 4517 字,大约阅读时间需要 15 分钟。

MainActivity如下:

 

package cc.testsmslistener;import cc.testsmslistener.SMSContentObserver.MessageListener;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.widget.TextView;import android.app.Activity;/** * Demo描述: * 利用ContentObserver实现短信查询 *  * 注意权限: * 
* */public class MainActivity extends Activity { private TextView mTextView; //所有短信 public static final String URI = "content://sms/"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init() { mTextView=(TextView) findViewById(R.id.textView); //注册内容观察者 SMSContentObserver smsContentObserver = new SMSContentObserver(new Handler(),this); this.getContentResolver().registerContentObserver (Uri.parse(URI), true, smsContentObserver); //回调 smsContentObserver.setOnReceivedMessageListener(new MessageListener() { @Override public void OnReceived(String message) { mTextView.setText(message); } }); }}

SMSContentObserver如下:

package cc.testsmslistener;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Handler;public class SMSContentObserver extends ContentObserver {	//所有短信	public static final String SMS_URI_ALL = "content://sms/";	//收件箱短信	public static final String SMS_URI_INBOX = "content://sms/inbox";	 //发件箱短信	public static final String SMS_URI_SEND = "content://sms/sent";	//草稿箱短信	public static final String SMS_URI_DRAFT = "content://sms/draft";		private Activity mActivity;	private List
mSmsInfoList; private MessageListener mMessageListener; public SMSContentObserver(Handler handler, Activity activity) { super(handler); this.mActivity = activity; } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); Uri uri = Uri.parse(SMS_URI_INBOX); mSmsInfoList = this.getSmsInfo(uri,mActivity); mMessageListener.OnReceived(mSmsInfoList.get(0).getSmsbody()); System.out.println("Message content is:"+mSmsInfoList.get(0).getSmsbody()); System.out.println("Message info is:"+mSmsInfoList.get(0)); } /** * 注意: * 该处只用按照时间降序取出第一条即可 * 这条当然是最新收到的消息 */ private List
getSmsInfo(Uri uri,Activity activity){ List
smsInfoList=new ArrayList
(); String[] projection = new String[] { "_id", "address", "person","body", "date", "type" }; Cursor cusor = activity.managedQuery(uri, projection, null, null,"date desc limit 1"); int nameColumn = cusor.getColumnIndex("person"); int phoneNumberColumn = cusor.getColumnIndex("address"); int smsbodyColumn = cusor.getColumnIndex("body"); int dateColumn = cusor.getColumnIndex("date"); int typeColumn = cusor.getColumnIndex("type"); if (cusor != null) { while (cusor.moveToNext()) { SmsInfo smsinfo = new SmsInfo(); smsinfo.setName(cusor.getString(nameColumn)); smsinfo.setDate(cusor.getString(dateColumn)); smsinfo.setPhoneNumber(cusor.getString(phoneNumberColumn)); smsinfo.setSmsbody(cusor.getString(smsbodyColumn)); smsinfo.setType(cusor.getString(typeColumn)); smsInfoList.add(smsinfo); } cusor.close(); } System.out.println("smsInfoList.size()="+smsInfoList.size()); return smsInfoList; } // 回调接口 public interface MessageListener { public void OnReceived(String message); } public void setOnReceivedMessageListener( MessageListener messageListener) { this.mMessageListener=messageListener; }}

SmsInfo如下:

package cc.testsmslistener;public class SmsInfo {    //短信内容	private String smsbody;	//发送短信的电话号码	private String phoneNumber;	//发送短信时间	private String date;	//发送短信人的姓名	private String name;	//短信类型1是接收到的,2是已发出	private String type;	public String getSmsbody() {		return smsbody;	}	public void setSmsbody(String smsbody) {		this.smsbody = smsbody;	}	public String getPhoneNumber() {		return phoneNumber;	}	public void setPhoneNumber(String phoneNumber) {		this.phoneNumber = phoneNumber;	}	public String getDate() {		return date;	}	public void setDate(String date) {		this.date = date;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getType() {		return type;	}	public void setType(String type) {		this.type = type;	}	@Override	public String toString() {		return "SmsInfo [smsbody=" + smsbody + ", phoneNumber=" + phoneNumber				+ ", date=" + date + ", name=" + name + ", type=" + type + "]";	}		}

main.xml如下:

 

 

 

 

 

转载地址:https://it9527.blog.csdn.net/article/details/25914413 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android短信查询(一)——利用BroadcastReceiver实现短信查询
下一篇:Android短信查询(三)——利用Loader实现短信查询

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月18日 16时47分00秒