package demo.my.com.myapidemo.content;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.util.Log;
import android.widget.EditText;
import demo.my.com.myapidemo.R;
/**
* Created by Hack on 2015/10/22.
*/
public class SmsContentObserver extends Activity {
private static final String TAG = "apidemo";
private EditText editText;
ContentObserver smsObserver;
private Uri SMS_INBOX = Uri.parse("content://sms");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
smsObserver = new SmsObserver(this, smsHandler);
getContentResolver().registerContentObserver(SMS_INBOX, true,
smsObserver);
editText = (EditText) findViewById(R.id.edit_text);
}
public Handler smsHandler = new Handler() {
//这里可以进行回调的操作
//TODO
};
class SmsObserver extends ContentObserver {
public SmsObserver(Context context, Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
getSmsFromPhone();
}
}
//获取手机短信内容
public void getSmsFromPhone() {
ContentResolver cr = getContentResolver();
String[] projection = new String[]{"body","type"};//"_id", "address", "person",, "date", "type"
String where = " date > " + (System.currentTimeMillis() - 10 * 1000);
Cursor cur = cr.query(SMS_INBOX, projection, where, null, "date desc");
if (null == cur)
return;
if (cur.moveToNext()) {
String body = cur.getString(cur.getColumnIndex("body"));
String sms_type = cur.getString(cur.getColumnIndex("type"));
if (body.indexOf("安卓") != -1 && sms_type.equals("1")) { //内容判断
String res = body.substring(0, 4);
Log.i(TAG, res);
editText.setText(res);
//将光标移动到字符串最后
Editable ea = editText.getText();
editText.setSelection(ea.length());
}
}
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
//这个时候就取消这个内容观察者,
getContentResolver().unregisterContentObserver(smsObserver);
Log.i(TAG, "onDestroy");
}
}
在Activity创建的时候,注册内容观察者,在销毁的时候,取消内容观察者。
应用所需要的权限:
<uses-permission android:name="android.permission.READ_SMS" />
截图:
监听验证码
Telephony.Sms相关知识链接:
http://www.cnblogs.com/fengzhblog/p/3193973.html