监听短信

在监听短信在这个功能中,通知观察者的工作已经有别人做好,我们只需要注册一个观察者即可。。。。

1、原理图

监听短信_第1张图片



2、MainActivity

package com.njupt.smsobserver2;

import java.util.Date;

import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.database.Cursor;
import android.view.Menu;

public class MainActivity extends Activity {

	private Uri uri;
	private ContentResolver resolver;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		uri = Uri.parse("content://sms");
		resolver = getContentResolver();
		resolver.registerContentObserver(uri,true,new SmsObserver2());
	}

	private class SmsObserver2 extends ContentObserver{
		public SmsObserver2(){
			super(new Handler());
		}
		
		@Override
		public void onChange(boolean selfChange) {
			Cursor c = resolver.query(uri, null, null, null, "_id DESC LIMIT 1");
			
			while(c.moveToNext()){
				String address = c.getString(c.getColumnIndex("address"));
				String body = c.getString(c.getColumnIndex("body"));
				long date = c.getLong(c.getColumnIndex("date"));
				int type = c.getInt(c.getColumnIndex("type"));
			
				if(type == 1){
					System.out.println( new Date(date)+" 您收到 " + address +"给你发的一封短信,短信内容为: \n" +body );
				}
			}
			
		}
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	
}

3、AndroidManifest.xml

最后千万别忘了在清单文件上加上所需要的相应权限

    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.WRITE_SMS"/>


你可能感兴趣的:(监听短信)